Connection check
verified live · 20h ago
company-formation
Form companies, manage bank accounts, cards, invoices and more — directly from your AI coding tools.
Tools
202
GitHub stars
—
Installs / wk
—
Licence
—
Transport
streamable-http, stdio
Last checked
20h ago
Tools & capabilities
202 toolsRead from the running server on 20h ago.
account_get_account
read-only
id*
GetAccount retrieves a single account by ID with its details GetAccount retrieves a single account by ID with its details
account_get_list_account_details
read-only
filterpageSizepageToken
GetListAccountDetails retrieves account details in batch (eliminates N+1 GetAccount calls) GetListAccountDetails retrieves account details in batch (eliminates N+1 GetAccount calls)
account_get_list_accounts
read-only
filterpageSizepageToken
GetListAccounts retrieves a list of accounts with filtering and pagination GetListAccounts retrieves a list of accounts with filtering and pagination
accounting_cancel_schedule
can modify data
companyId*scheduleId*
Cancel an accrual schedule so no further periodic entries are generated. Entries already posted for elapsed periods are kept. Audit-logged. Cancel an accrual schedule so no further periodic entries are generated. Entries already posted for elapsed periods are kept. Audit-logged.
accounting_close_period
can modify data
basisendDatecompanyId*startDategranularity
Close an accounting period: lock the window [start_date, end_date] and post a balanced closing entry that rolls the period's net income into equity (current-year earnings for a mon… Close an accounting period: lock the window [start_date, end_date] and post a balanced closing entry that rolls the period's net income into equity (current-year earnings for a month/quarter close, retained earnings for a fiscal-year close). Periods must not overlap an existing closed period. After closing, writes dated inside the window are rejected until the period is reopened. Re-closing the same window is a no-op. Multi-currency companies get one closing entry per currency. Every close is audit-logged.
accounting_create_schedule
kindcompanyId*startDateperiodCounttotalAmountcurrencyCode
+3
Create an accrual schedule that spreads a total amount across N monthly periods as accrual-only adjusting entries (e.g. amortize a prepaid, defer revenue, depreciate an asset). Eac… Create an accrual schedule that spreads a total amount across N monthly periods as accrual-only adjusting entries (e.g. amortize a prepaid, defer revenue, depreciate an asset). Each period posts Dr debit_gl_account / Cr credit_gl_account for its share; the split is straight-line with any rounding remainder on the final period. Pick gl_account_id values from accounting_get_chart_of_accounts. Cash-basis reports are unaffected.
accounting_delete_journal_entry
can modify data
companyId*journalEntryId*
Delete or void a journal entry. For entries tied to a transaction prefer re-categorizing the transaction (the entry re-derives). Deleting a derived entry is temporary — the engine… Delete or void a journal entry. For entries tied to a transaction prefer re-categorizing the transaction (the entry re-derives). Deleting a derived entry is temporary — the engine re-creates it on the next sync; deleting a manual per-transaction override reverts the transaction to its automatic entry; a standalone manual entry is voided (kept for audit, excluded from reports). Every outcome is audit-logged.
accounting_get_balance_sheet
read-only
basisasOfDatecompanyId*currencyCode
GetBalanceSheet returns assets, liabilities, and equity balances as of a date; equity includes net income to date, so the sheet always balances. Read-only. GetBalanceSheet returns assets, liabilities, and equity balances as of a date; equity includes net income to date, so the sheet always balances. Read-only.
accounting_get_chart_of_accounts
read-only
companyId*includeInactive
GetChartOfAccounts returns the company's chart of accounts (flat list with parent links; build the tree client-side). Read-only. GetChartOfAccounts returns the company's chart of accounts (flat list with parent links; build the tree client-side). Read-only.
accounting_get_general_ledger
read-only
basisendDatepageSizecompanyId*pageTokenstartDate
+2
GetGeneralLedger pages through one account's posted lines with opening, running, and closing balances — the account register. Read-only. GetGeneralLedger pages through one account's posted lines with opening, running, and closing balances — the account register. Read-only.
accounting_get_journal_entry_by_transaction
read-only
companyId*transactionId*
GetJournalEntryByTransaction returns the journal entry derived for one transaction (empty when none exists yet). Read-only. GetJournalEntryByTransaction returns the journal entry derived for one transaction (empty when none exists yet). Read-only.
accounting_get_list_journal_entries
read-only
filterpageSizecompanyId*pageToken
GetListJournalEntries pages through the journal register with filters — the review queue is filter{needs_review: true}. Read-only. GetListJournalEntries pages through the journal register with filters — the review queue is filter{needs_review: true}. Read-only.
accounting_get_list_periods
read-only
filterpageSizecompanyId*pageToken
GetListPeriods pages through a company's periods, newest first. Read-only. GetListPeriods pages through a company's periods, newest first. Read-only.
accounting_get_list_schedules
read-only
filterpageSizecompanyId*pageToken
GetListSchedules pages through a company's schedules. Read-only. GetListSchedules pages through a company's schedules. Read-only.
accounting_get_period
read-only
periodId*companyId*
GetPeriod returns one closed period by id. Read-only. GetPeriod returns one closed period by id. Read-only.
accounting_get_profit_and_loss
read-only
basisendDatecompanyId*startDatecurrencyCode
GetProfitAndLoss returns the income statement for a period: revenue and expense accounts with activity, totals, and net income. Read-only. GetProfitAndLoss returns the income statement for a period: revenue and expense accounts with activity, totals, and net income. Read-only.
accounting_get_schedule
read-only
companyId*scheduleId*
GetSchedule returns one schedule with its postings. Read-only. GetSchedule returns one schedule with its postings. Read-only.
accounting_get_trial_balance
read-only
basisendDatecompanyId*startDatecurrencyCode
GetTrialBalance returns every account's debit and credit totals for a period; total debits equal total credits when the books balance. Read-only. GetTrialBalance returns every account's debit and credit totals for a period; total debits equal total credits when the books balance. Read-only.
accounting_list_accounting_audit_events
read-only
entityIdpageSizecompanyId*pageToken
ListAccountingAuditEvents pages through the append-only accounting audit log — who changed what and when across journal entries and the chart of accounts, newest first. Filter by e… ListAccountingAuditEvents pages through the append-only accounting audit log — who changed what and when across journal entries and the chart of accounts, newest first. Filter by entity_id for one record's history. Read-only.
accounting_preview_close
read-only
basisendDatecompanyId*startDate
PreviewClose computes the per-currency revenue/expense totals and the net income a close would roll, without writing anything. Read-only. PreviewClose computes the per-currency revenue/expense totals and the net income a close would roll, without writing anything. Read-only.
accounting_preview_schedule
read-only
startDateperiodCounttotalAmount
PreviewSchedule computes the straight-line per-period split for the given amount and period count without persisting anything. Read-only. PreviewSchedule computes the straight-line per-period split for the given amount and period count without persisting anything. Read-only.
accounting_propose_schedules
read-only
companyId*
Scan a company's recent posted transactions and suggest accrual schedules (e.g. amortize a large annual prepaid over 12 months). Returns proposals only — nothing is created until y… Scan a company's recent posted transactions and suggest accrual schedules (e.g. amortize a large annual prepaid over 12 months). Returns proposals only — nothing is created until you confirm one by calling accounting_create_schedule with the proposal's fields. Each proposal carries the suggested kind, total amount, start date, period count, debit/credit GL accounts, the source transaction, and a rationale.
accounting_reopen_period
can modify data
periodId*companyId*
Reopen a closed accounting period: void its closing entry(ies) and lift the write lock so entries dated inside the window can be edited and the period re-closed. Audit-logged. Reopen a closed accounting period: void its closing entry(ies) and lift the write lock so entries dated inside the window can be edited and the period re-closed. Audit-logged.
accounting_upsert_journal_entry
entry*
Create or replace a double-entry journal entry (manual adjustment or per-transaction override). Lines must balance: total debits == total credits, 2-64 lines, positive decimal amou… Create or replace a double-entry journal entry (manual adjustment or per-transaction override). Lines must balance: total debits == total credits, 2-64 lines, positive decimal amounts with the sign carried by side. Pick gl_account_id values from accounting_get_chart_of_accounts (postable accounts only). An entry with transaction_id replaces that transaction's derived entry and is preserved across re-enrichment. The entry is recorded as source=user and status=POSTED regardless of what is supplied, and every save is written to the audit log.
ads_insight_summarize_campaign_window
provideraccountIdcompanyIdperiodEndperiodStartchargeAmount
SummarizeCampaignWindow summarises one charge against the campaigns in its billing window. Results are cached per company + account + window + charge, so repeated panel opens do no… SummarizeCampaignWindow summarises one charge against the campaigns in its billing window. Results are cached per company + account + window + charge, so repeated panel opens do not re-run the agent.
approval_session_get_approval_session_status
read-only
sessionId*
GetApprovalSessionStatus is a lightweight poll (status only) for the gated action to check whether it can proceed GetApprovalSessionStatus is a lightweight poll (status only) for the gated action to check whether it can proceed
cap_table_clear_cap_table_stakeholders
companyId*
ClearCapTableStakeholders deletes every stakeholder of a company in a single DB-level operation. Used by the "replace cap table" import flow. ClearCapTableStakeholders deletes every stakeholder of a company in a single DB-level operation. Used by the "replace cap table" import flow.
cap_table_close_cap_table_round
can modify data
roundId*companyId*newMoneyRaisepreMoneyValuationcarryForwardUnwiredtargetOptionPoolPct
CloseCapTableRound PERMANENTLY closes the round: runs the calc engine, persists the SAFE conversions + ownership snapshots, and flips the round to CLOSED. This is the action for "c… CloseCapTableRound PERMANENTLY closes the round: runs the calc engine, persists the SAFE conversions + ownership snapshots, and flips the round to CLOSED. This is the action for "close the round", "make it permanent", or "finalize the round" — it CANNOT be undone and writes the cap-table of record, so confirm with the user first. To only estimate the outcome without closing, use PreviewCloseCapTableRound.
cap_table_create_cap_table_agreement
nametyperoundIdcompanyId*granteeNamesourceS3Uri
+2
CreateCapTableAgreement creates a draft non-SAFE agreement. CreateCapTableAgreement creates a draft non-SAFE agreement.
cap_table_create_cap_table_round
round*pastRound
cap_table_create_cap_table_stakeholder
stakeholder*
Adds a stakeholder IDENTITY ONLY (name, type, email, metadata). Does NOT create any holding/security and will NOT appear in the investor pipeline. For an investor contributing capi… Adds a stakeholder IDENTITY ONLY (name, type, email, metadata). Does NOT create any holding/security and will NOT appear in the investor pipeline. For an investor contributing capital via SAFE or priced shares, use RecordCapTableInvestment instead (it creates the party and its holding together).
cap_table_delete_cap_table_agreement
can modify data
companyId*agreementId*
DeleteCapTableAgreement removes an agreement. DeleteCapTableAgreement removes an agreement.
cap_table_delete_cap_table_round
can modify data
roundId*companyId*
DeleteCapTableRound permanently removes an unpriced SAFE round (open or light-closed) plus its round-scoped securities/agreements/snapshots. Priced / engine-closed rounds are rejec… DeleteCapTableRound permanently removes an unpriced SAFE round (open or light-closed) plus its round-scoped securities/agreements/snapshots. Priced / engine-closed rounds are rejected (FailedPrecondition).
cap_table_delete_cap_table_security
can modify data
companyId*securityId*
DeleteCapTableSecurity removes one holding. DeleteCapTableSecurity removes one holding.
cap_table_delete_cap_table_stakeholder
can modify data
stakeholderId*
DeleteCapTableStakeholder removes one stakeholder from a cap table. DeleteCapTableStakeholder removes one stakeholder from a cap table.
cap_table_download_cap_table_safes
read-only
companyId*agreementIds
DownloadCapTableSafes presigns multiple SAFE agreement PDFs in one call. DownloadCapTableSafes presigns multiple SAFE agreement PDFs in one call.
cap_table_extract_wire_payment_proof
agentCodecompanyId*securityId*sourceS3Uri
Runs vision OCR on an already-uploaded wire payment proof (wire confirmation, bank statement, or transfer receipt — NOT an invoice) for a security and returns the extracted fields… Runs vision OCR on an already-uploaded wire payment proof (wire confirmation, bank statement, or transfer receipt — NOT an invoice) for a security and returns the extracted fields plus a verification verdict (verified | needs_review | mismatch). Nothing is persisted. Flow: call GetOcrUploadURL with kind=WIRE_PROOF, PUT the file bytes to the returned upload_url, then call this with the returned source_s3_uri. Only a 'verified' verdict can back a wire in RecordCapTableWire.
cap_table_generate_cap_table_agreement_pdf
companyId*agreementId*
GenerateCapTableAgreementPdf renders the PDF for one employee equity-grant agreement (option/rsu/rsa/fast) and stores it. Returns the S3 key. The presigned download URL is fetched… GenerateCapTableAgreementPdf renders the PDF for one employee equity-grant agreement (option/rsu/rsa/fast) and stores it. Returns the S3 key. The presigned download URL is fetched via GetCapTableAgreementPdfUrl.
cap_table_generate_cap_table_docs
companyId*stakeholderIds
GenerateCapTableDocs kicks off the async generation pipeline. GenerateCapTableDocs kicks off the async generation pipeline.
cap_table_generate_cap_table_summary_pdf
companyId*
GenerateCapTableSummaryPdf renders the cap-table summary to a branded PDF on the backend document engine (Gotenberg) and returns the bytes (#364 — moves PDF generation out of the b… GenerateCapTableSummaryPdf renders the cap-table summary to a branded PDF on the backend document engine (Gotenberg) and returns the bytes (#364 — moves PDF generation out of the browser). Read-only.
cap_table_get_cap_table_agreement
read-only
id*
cap_table_get_cap_table_agreement_pdf_url
read-only
attachmentagreementId*
GetCapTableAgreementPdfUrl returns a short-lived signed S3 URL for the rendered SAFE agreement PDF. GetCapTableAgreementPdfUrl returns a short-lived signed S3 URL for the rendered SAFE agreement PDF.
cap_table_get_cap_table_equity_plans
read-only
companyId*
Returns a company's equity holdings grouped the way a founder thinks about them: founders, advisors, employees (option grants), and investors. Read-only. Founder, advisor and emplo… Returns a company's equity holdings grouped the way a founder thinks about them: founders, advisors, employees (option grants), and investors. Read-only. Founder, advisor and employee entries carry vesting progress resolved as of now — vested percentage, vested share or option count, and whether the cliff has passed. Investor entries carry the committed amount, valuation cap, discount and pipeline stage. Use this to answer "who holds what" or "how much of X's grant has vested" without adding up securities by hand.
cap_table_get_cap_table_investor_access
read-only
companyId*
GetCapTableInvestorAccess lists every investor stakeholder with its current cap-table visibility level (read directly from the stakeholder row; a new investor defaults to NONE). Re… GetCapTableInvestorAccess lists every investor stakeholder with its current cap-table visibility level (read directly from the stakeholder row; a new investor defaults to NONE). Read-only.
cap_table_get_cap_table_overview
read-only
companyId*
cap_table_get_cap_table_round
read-only
id*
cap_table_get_cap_table_round_summaries
read-only
companyId*
Returns, for every funding round that has investors attached, how much capital sits at each stage of the pipeline (committed, signed, wired), the total raised, and how many investo… Returns, for every funding round that has investors attached, how much capital sits at each stage of the pipeline (committed, signed, wired), the total raised, and how many investors are in the round. Read-only. Use this to answer "how is the round going" or "how much have we actually collected" without adding up individual investors by hand — the stage buckets are exclusive, so each investor's capital appears in exactly one of them and raised is their sum. Wired is money in the bank; committed and signed are promised but not yet received.
cap_table_get_cap_table_security
read-only
securityId*
GetCapTableSecurity returns one holding by id. Read-only. GetCapTableSecurity returns one holding by id. Read-only.
cap_table_get_cap_table_stakeholder
read-only
stakeholderId*
GetCapTableStakeholder returns one stakeholder by id. Read-only. GetCapTableStakeholder returns one stakeholder by id. Read-only.
cap_table_get_cap_table_summary
read-only
asOfcompanyId*
GetCapTableSummary returns the dashboard aggregate (totals, stakeholder count, founders %, and per-type ownership segments) on the fully-diluted source roster. Keeps the ownership… GetCapTableSummary returns the dashboard aggregate (totals, stakeholder count, founders %, and per-type ownership segments) on the fully-diluted source roster. Keeps the ownership math server-side. Read-only.
cap_table_get_list_cap_table_agreements
read-only
pageSizecompanyId*pageTokentypeFilter
cap_table_get_list_cap_table_rounds
read-only
pageSizecompanyId*pageToken
cap_table_get_list_cap_table_securities
read-only
pageSizecompanyId*pageTokenstakeholderId
GetListCapTableSecurities lists a company's holdings (optionally filtered to one stakeholder), paginated. Read-only. GetListCapTableSecurities lists a company's holdings (optionally filtered to one stakeholder), paginated. Read-only.
cap_table_get_list_cap_table_stakeholders
read-only
pageSizecompanyId*pageToken
GetListCapTableStakeholders returns a company's stakeholder roster (company-scoped, paginated). Read-only. GetListCapTableStakeholders returns a company's stakeholder roster (company-scoped, paginated). Read-only.
cap_table_get_list_cap_table_wire_match_suggestions
read-only
companyId*securityId
cap_table_get_my_investor_companies
read-only
GetMyInvestorCompanies returns the companies where the caller is a linked investor stakeholder (not a member), with the owner-granted access level — the entry point for the investo… GetMyInvestorCompanies returns the companies where the caller is a linked investor stakeholder (not a member), with the owner-granted access level — the entry point for the investor-facing portal (B3). Read-only.
cap_table_get_safe_import_consent
read-only
companyId*
GetSafeImportConsent reports whether the company has granted current consent for an external AI to read imported SAFE contents. GetSafeImportConsent reports whether the company has granted current consent for an external AI to read imported SAFE contents.
cap_table_get_transaction_summary
read-only
companyId*
GetTransactionSummary returns the committed / signed / wired capital totals for the Transactions page header. committed/signed come from the securities pipeline stage; wired comes… GetTransactionSummary returns the committed / signed / wired capital totals for the Transactions page header. committed/signed come from the securities pipeline stage; wired comes from the money-movement ledger. Read-only.
cap_table_get_wired_transactions
read-only
companyId*
GetWiredTransactions returns the confirmed-wire ledger (wired + refunded investor rows) for the fundraising Transactions page. Read-only. GetWiredTransactions returns the confirmed-wire ledger (wired + refunded investor rows) for the fundraising Transactions page. Read-only.
cap_table_grant_safe_import_consent
can modify data
companyId*
GrantSafeImportConsent records the company's consent at the current wording version. Required before an MCP-origin SaveCapTableImport. GrantSafeImportConsent records the company's consent at the current wording version. Required before an MCP-origin SaveCapTableImport.
cap_table_import_rsa
can modify data
previewcompanyId*sourceS3UristakeholderIdconsentToAiReadrsaTermsOverride
+1
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… 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, or would_create=true when no stakeholder matches) 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.
cap_table_import_safe
can modify data
previewroundIdcompanyId*postMoneydocumentIdsourceS3Uri
+7
Imports a SAFE from an uploaded SAFE PDF and stores the document in S3. USE THIS (not RecordCapTableInvestment) whenever the user provides or uploads a SAFE PDF file. Flow: (1) cal… Imports a SAFE from an uploaded SAFE PDF and stores the document in S3. USE THIS (not RecordCapTableInvestment) whenever the user provides or uploads a SAFE PDF file. Flow: (1) call GetOcrUploadUrl with kind=SAFE and mime_type=application/pdf to get a presigned PUT URL + source_s3_uri, (2) upload the PDF bytes to that PUT URL, (3) call ImportSAFE with that source_s3_uri. This runs OCR to extract the terms; pass valuation_cap / investment_amount / discount_rate only to CORRECT a value the user says the OCR misread, and leave them empty to keep what the document says. Call ExtractSafeTerms first and get the user's confirmation before importing. effective_date is required — never import a SAFE without a date. If the company named on the document differs from this company, say both names and get the user's confirmation before importing. It copies the PDF to the canonical cap-table SAFE location, links it to a SAFE agreement, resolves the investor by name (matching an existing stakeholder or creating a new one), and creates the security. The security is marked signed only if the document is actually signed; an unsigned SAFE PDF is still stored and left committed. Whenever the user has the PDF — including when they attached it to this conversation — upload it and pass source_s3_uri so the document itself is stored; a SAFE created from typed terms alone has nothing on record proving its date or signature, and the cap table flags it as missing its document. Use RecordCapTableInvestment only for a SAFE the user genuinely has no document for. The response carries the cap table before this call, what it added, and the cap table after — report an import in exactly that order (current table, new additions, final table) and take the totals from the response rather than reading the cap table again. For several SAFEs at once, list every one you are about to add and get a yes before the first call, not after the last.
cap_table_list_cap_table_audit_events
read-only
pageSizecompanyId*pageToken
ListCapTableAuditEvents returns the append-only who/what/when audit log for a company's ownership-affecting cap-table mutations (B1). Read-only. ListCapTableAuditEvents returns the append-only who/what/when audit log for a company's ownership-affecting cap-table mutations (B1). Read-only.
cap_table_list_cap_table_snapshots_for_round
read-only
roundId*
cap_table_list_cap_table_summary_snapshots
read-only
pageSizecompanyId*pageToken
ListCapTableSummarySnapshots returns the point-in-time cap-table summary versions captured on material edits (B4). Read-only. ListCapTableSummarySnapshots returns the point-in-time cap-table summary versions captured on material edits (B4). Read-only.
cap_table_list_cumulative_cap_table_snapshots_for_stakeholder
read-only
companyId*stakeholderId*
cap_table_match_cap_table_stakeholder
companyId*investorName
MatchCapTableStakeholder suggests the existing stakeholder a parsed SAFE's investor name maps to (fuzzy match). Read-only. MatchCapTableStakeholder suggests the existing stakeholder a parsed SAFE's investor name maps to (fuzzy match). Read-only.
cap_table_preview_close_cap_table_round
read-only
roundId*companyId*newMoneyRaisepreMoneyValuationtargetOptionPoolPct
PreviewCloseCapTableRound runs the SAME engine as CloseCapTableRound but does NOT persist or close anything — no status change, no snapshot writes. This is the action for "preview"… PreviewCloseCapTableRound runs the SAME engine as CloseCapTableRound but does NOT persist or close anything — no status change, no snapshot writes. This is the action for "preview", "what-if", or "estimate the close"; it never finalizes the round. To actually close/finalize, use CloseCapTableRound.
cap_table_record_cap_table_investment
can modify data
mfnsharesproRataroundIdvestingsafeType
+8
Records one holding end-to-end: resolves or creates the stakeholder, then creates the holding with all derived fields, attaching or auto-creating a round for SAFE/Preferred. SAFE r… Records one holding end-to-end: resolves or creates the stakeholder, then creates the holding with all derived fields, attaching or auto-creating a round for SAFE/Preferred. SAFE requires a valuation_cap. VESTING: for service equity held by a founder, employee, or advisor (instrument_type COMMON_STOCK or OPTION — restricted stock and option grants that vest over time), you MUST set the vesting field { start_date, total_months, cliff_months }. Carry these values from ExtractCapTable output (vesting_start_date / vesting_total_months / vesting_cliff_months) when importing a cap table. If such a holding has no vesting schedule in the source, ASK the user for the vesting start date, total months (e.g. 48), and cliff months (e.g. 12) BEFORE calling this tool — do not omit vesting and do not silently record it as fully vested. OMIT vesting entirely for investor instruments (SAFE, PREFERRED_STOCK, CONVERTIBLE_NOTE) — they never vest. Returns the stakeholder, security, and round ids. The response carries the cap table before this call, what it added, and the cap table after — report an import in exactly that order (current table, new additions, final table) and take the totals from the response rather than reading the cap table again. For several SAFEs at once, list every one you are about to add and get a yes before the first call, not after the last.
cap_table_record_cap_table_refund
can modify data
amountcompanyId*referenceoccurredAtsecurityId*transactionId
RecordCapTableRefund records a refund into the money-movement ledger (refund, confirmed) and flips the security's pipeline_status to 'refunded'. RecordCapTableRefund records a refund into the money-movement ledger (refund, confirmed) and flips the security's pipeline_status to 'refunded'.
cap_table_record_cap_table_wire
can modify data
amountcompanyId*referenceoccurredAtsecurityId*ocrConfidence
+2
Records an investor wire into the money-movement ledger and flips the security's pipeline_status to 'wired'. A wire is accepted ONLY when it is backed by one of: (a) a matched bank… Records an investor wire into the money-movement ledger and flips the security's pipeline_status to 'wired'. A wire is accepted ONLY when it is backed by one of: (a) a matched banking transaction_id (see GetListCapTableWireMatchSuggestions), or (b) a proof_document_uri whose ExtractWirePaymentProof verdict is 'verified'. With neither, the call is rejected — never mark a wire wired without a matched transaction or a verified payment proof.
cap_table_reopen_cap_table_round
can modify data
roundId*
ReopenCapTableRound flips a CLOSED round back to OPEN (status only). ReopenCapTableRound flips a CLOSED round back to OPEN (status only).
captable_send_safe_for_signature
can modify data
providercompanyIdinvestorsaccessCodecompanyName*founderEmail
+5
CreateSafeEnvelope opens a two-party SAFE signing envelope from cap-table-supplied data (the caller fetched it via company.GetSafeAgreement): it renders the signable SAFE PDF, inse… CreateSafeEnvelope opens a two-party SAFE signing envelope from cap-table-supplied data (the caller fetched it via company.GetSafeAgreement): it renders the signable SAFE PDF, inserts the company (order 1) + investor (order 2) signers, and returns the raw investor signing token ONCE.
cap_table_set_cap_table_authorized_shares
can modify data
companyId*authorizedSharesauthorizedCommonSharesauthorizedPreferredShares
SetCapTableAuthorizedShares updates the company's authorized share ceiling (charter amendment must have been obtained before calling this). Owner-only. SetCapTableAuthorizedShares updates the company's authorized share ceiling (charter amendment must have been obtained before calling this). Owner-only.
cap_table_set_cap_table_pipeline_status
companyId*securityId*pipelineStatus
Moves ONE investor's holding along the fundraising pipeline. Use this to change a stage — never UpdateCapTableSecurity, which is a full replace and will blank any field you do not… Moves ONE investor's holding along the fundraising pipeline. Use this to change a stage — never UpdateCapTableSecurity, which is a full replace and will blank any field you do not resend. Forward goes one stage at a time: committed -> sent -> signed (awaiting_middleman sits between sent and signed and applies only to deals routed through a middleman, so stepping over it is fine). Skipping further ahead is rejected. Moving BACK to an earlier stage is allowed and is how a stage entered by mistake gets corrected — no need to delete the investor. Two things cannot be undone: 'wired' is set only by recording the wire (RecordCapTableWire, which requires a matched bank transaction or a verified payment proof) and never by this tool, and once wired the only move is a refund (RecordCapTableRefund). Setting the stage a holding already has is accepted and changes nothing. The fundraising pipeline is investors only: founders and employees receive equity, they never commit or wire capital, so a stage move on their holding is refused — leave them out when you list or summarize the pipeline.
cap_table_simulate_cap_table_exit
companyId*exitValuation
Computes what every stakeholder takes home at ONE hypothetical exit valuation, running the liquidation-preference waterfall and converting SAFEs as if the exit were the price round… Computes what every stakeholder takes home at ONE hypothetical exit valuation, running the liquidation-preference waterfall and converting SAFEs as if the exit were the price round. 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.
cap_table_update_cap_table_agreement
agreement*
UpdateCapTableAgreement applies a full update (status/progress/timestamps). UpdateCapTableAgreement applies a full update (status/progress/timestamps).
cap_table_update_cap_table_agreement_status
id*status
UpdateCapTableAgreementStatus transitions a SAFE agreement's status (Feature 10 pipeline wiring) — e.g. to completed once signing finishes. Status-only update; artifact pointers ar… UpdateCapTableAgreementStatus transitions a SAFE agreement's status (Feature 10 pipeline wiring) — e.g. to completed once signing finishes. Status-only update; artifact pointers are preserved.
cap_table_update_cap_table_round
round*
cap_table_update_cap_table_security
security*
UpdateCapTableSecurity applies a full update to a holding. UpdateCapTableSecurity applies a full update to a holding.
cap_table_update_cap_table_stakeholder
stakeholder*
Edits an EXISTING stakeholder's identity (name, type, email, metadata) by id. FULL REPLACE; type is effectively immutable. To ADD a new stakeholder use CreateCapTableStakeholder; f… Edits an EXISTING stakeholder's identity (name, type, email, metadata) by id. FULL REPLACE; type is effectively immutable. To ADD a new stakeholder use CreateCapTableStakeholder; for an investor contributing capital use RecordCapTableInvestment.
cap_table_update_my_stakeholder_name
name*companyId*
UpdateMyStakeholderName lets an investor correct the name the company holds for them — a misspelled name on a SAFE is the investor's to fix, and asking the founder to retype it was… UpdateMyStakeholderName lets an investor correct the name the company holds for them — a misspelled name on a SAFE is the investor's to fix, and asking the founder to retype it was the only route. Scoped to the caller's own stakeholder row; nothing else on the row can be changed this way.
card_create_card
params*
Issues a new virtual card at the card issuer. Set params.company_id to the company the card belongs to — the caller's membership is verified server-side, so pass a company the user… Issues a new virtual card at the card issuer. Set params.company_id to the company the card belongs to — the caller's membership is verified server-side, so pass a company the user actually belongs to (get_my_companies lists them). Set params.nickname to the name the user gave the card. Set params.spend_limit_cents to the limit in CENTS, not dollars: a $2,000 limit is 200000. params.spend_interval is REQUIRED whenever you send a limit and the call is rejected without it, so always send both — send SPEND_INTERVAL_MONTHLY when the user names an amount but no period, SPEND_INTERVAL_DAILY for a daily cap, or SPEND_INTERVAL_TRANSACTION for a per-charge cap. Do not send SPEND_INTERVAL_YEARLY: the default issuer does not support it and rejects the call — convert to a monthly amount and say so. Omit both fields only when the user wants no limit at all. Returns the created card, including its id, nickname, status, spend limit, expiry, cardholder, and billing address; report the id back to the user. Creating a card moves no money, but it does provision a real instrument at the issuer and no tool can delete it — only freeze it — so create one card per request and never retry a create that already succeeded. The full card number and CVV are never returned by any tool.
card_freeze_card
can modify data
cardId*
Suspend a card at the issuer so it declines new charges. The card is not closed and no money moves; UnfreezeCard restores it. Safe to repeat: a card that is already frozen is retur… Suspend a card at the issuer so it declines new charges. The card is not closed and no money moves; UnfreezeCard restores it. Safe to repeat: a card that is already frozen is returned unchanged and successfully. Only report a card as frozen when the call succeeded — an error means it is still live.
card_get_card
read-only
cardId*
card_get_card_spend
read-only
cardId*
card_get_list_cards
read-only
includeCanceled
List the caller's own cards. List the caller's own cards.
card_get_list_card_transactions
read-only
cardId*
Sync provider transactions (best-effort), then return the card's rows. Sync provider transactions (best-effort), then return the card's rows.
card_get_list_org_cards
read-only
companyId*
List the active cards of every member of the given company, as a narrow projection. Membership of the AUTHENTICATED caller in company_id is verified server-side — the id selects, i… List the active cards of every member of the given company, as a narrow projection. Membership of the AUTHENTICATED caller in company_id is verified server-side — the id selects, it never authorizes.
card_unfreeze_card
cardId*
Restore a frozen card at the issuer so it accepts charges again. Safe to repeat: a card that is already active is returned unchanged and successfully. A cancelled card cannot be re… Restore a frozen card at the issuer so it accepts charges again. Safe to repeat: a card that is already active is returned unchanged and successfully. A cancelled card cannot be restored and is rejected.
card_update_card_spend_limit
cardId*intervalamountCents
Replace a card's spend limit at the issuer. amount_cents is in CENTS, not dollars — a $500 limit is 50000 — and interval chooses the window the limit resets over. The new limit rep… Replace a card's spend limit at the issuer. amount_cents is in CENTS, not dollars — a $500 limit is 50000 — and interval chooses the window the limit resets over. The new limit replaces the old one outright, so this raises spending authority as readily as it lowers it: send the exact amount the user asked for and never round up. Use SPEND_INTERVAL_MONTHLY, SPEND_INTERVAL_DAILY, or SPEND_INTERVAL_TRANSACTION; SPEND_INTERVAL_YEARLY is not supported by the default issuer and is rejected, so convert a yearly figure to a monthly amount and say so.
check_company_name_availability
read-only
name
Checks whether a proposed company or brand name is available as a US trademark and as a domain across common TLDs (.com, .io, .co, .net, .ai, .app). Call this whenever the user pro… Checks whether a proposed company or brand name is available as a US trademark and as a domain across common TLDs (.com, .io, .co, .net, .ai, .app). Call this whenever the user proposes or evaluates a name. It is informational only and does not read or change any formation; a partial failure still returns useful results for the side that succeeded.
client_get_client
read-only
id*
client_get_list_clients
read-only
filterpageSizepageToken
company_get_company
read-only
idcode
GetCompany retrieves a single company by ID or code GetCompany retrieves a single company by ID or code
company_get_list_companies
read-only
filterpageSizepageToken
GetListCompanies retrieves a list of companies with filtering and pagination GetListCompanies retrieves a list of companies with filtering and pagination
company_get_list_company_members
read-only
companyId*
GetListCompanyMembers lists all members of a company GetListCompanyMembers lists all members of a company
company_get_my_companies
read-only
pageSizepageToken
Lists the companies the SIGNED-IN user already belongs to, each with their role, plus that account itself in signed_in_as. Requires authentication. Call this only when the user ask… Lists the companies the SIGNED-IN user already belongs to, each with their role, plus that account itself in signed_in_as. Requires authentication. Call this only when the user asks about or wants to act on an EXISTING company. Do NOT call it to start a new formation (use formation_start_formation, which is anonymous) — it is not a required preamble. ALWAYS name the signed_in_as account when you show the list, and especially when the user cannot find a company they expect: you and the person reading your answer may be signed in as different users, and then your list and the one on their screen will not match. Naming the account turns that from a mystery into one sentence. A company they expect but do not see belongs to another account or they were never added as a member — never guess a company_id. To work on a different company from this list, simply pass its company_id to the next tool call: the connection is not tied to one company and the user does NOT have to disconnect and reconnect. Say which company you acted on whenever it is not the one they last mentioned.
counterparty_get_counterparty
read-only
id*
GetCounterparty retrieves a single counterparty by ID GetCounterparty retrieves a single counterparty by ID
counterparty_get_list_counterparties
read-only
filterpageSizepageToken
GetListCounterparties retrieves a list of counterparties with filtering and pagination GetListCounterparties retrieves a list of counterparties with filtering and pagination
counterparty_get_list_global_counterparties
read-only
filter*pageSizepageToken
GetListGlobalCounterparties performs a read-only batch lookup against the platform-wide canonical vendor registry. The filter accepts a list of provider stable IDs and/or aliases;… GetListGlobalCounterparties performs a read-only batch lookup against the platform-wide canonical vendor registry. The filter accepts a list of provider stable IDs and/or aliases; the response returns every approved row matching ANY selector. Used by the cheap-resolve worker to short-circuit LLM enrichment for a whole batch in one RPC.
datatable_get_datatable_fields
read-only
companyIddatatableCode*includeOptions
Resolve all fields bound to a datatable for a company (platform + company bindings). Resolve all fields bound to a datatable for a company (platform + company bindings).
datatable_get_list_datatables
read-only
filterpageSizepageToken
List datatables (platform + a company's own). List datatables (platform + a company's own).
datatable_get_related_datatables
read-only
companyIdparentDatatableCode*
Resolve the child datatables related to a parent (for the UI field picker). Resolve the child datatables related to a parent (for the UI field picker).
documents_create_document
fieldscompanyId*templateSlug
Create a finished document for a company from a template slug and field values. Create a finished document for a company from a template slug and field values.
documents_create_from_user_template
fieldscompanyId*userTemplateId*
Create a finished document by filling a company user-uploaded template with collected field values. Does not modify the original upload. Create a finished document by filling a company user-uploaded template with collected field values. Does not modify the original upload.
documents_get_document
read-only
companyId*documentId*
Fetch one document's metadata and its related signed/unsigned set. Fetch one document's metadata and its related signed/unsigned set.
documents_get_user_template
read-only
companyId*templateId*
Fetch one user-uploaded template including Vision-detected fillable fields. Fetch one user-uploaded template including Vision-detected fillable fields.
documents_list_documents
read-only
filterpageSizepageToken
List a company's documents, filtered by type, source, category, or template. List a company's documents, filtered by type, source, category, or template.
documents_list_saved_signatures
read-only
companyId*
List the caller's saved signatures for the selected company. List the caller's saved signatures for the selected company.
documents_list_user_templates
read-only
companyId*
List company-scoped user-uploaded templates (Use your own template). Separate from Lovie's builtin catalog. List company-scoped user-uploaded templates (Use your own template). Separate from Lovie's builtin catalog.
documents_update_document
titlecompanyId*documentId*
Rename a stored document by updating its title. Company-scoped: only the owning company's members may rename. Rename a stored document by updating its title. Company-scoped: only the owning company's members may rename.
document_template_list_templates
read-only
querycategory
List available legal document templates (YAML catalog). List available legal document templates (YAML catalog).
document_template_resolve_template
query
Find the best template match for a natural-language document request. Returns the template slug and its field definitions to collect before DocumentService.CreateDocument. Find the best template match for a natural-language document request. Returns the template slug and its field definitions to collect before DocumentService.CreateDocument.
field_get_field
read-only
idcodecompanyId
Get a single field by ID or code Get a single field by ID or code
field_get_field_option
read-only
idcodefieldId*companyId
Get a single field option by ID or code Get a single field option by ID or code
field_get_list_field_options
read-only
filter*pageSizepageToken
List field options with filtering and pagination List field options with filtering and pagination
field_get_list_fields
read-only
filterpageSizepageTokenincludeOptions
List fields with filtering and pagination List fields with filtering and pagination
field_suggest_field_options
fieldNameexistingOptions
SuggestFieldOptions asks the LLM to propose dropdown option labels for a SELECT-typed field. Synchronous unary call. SuggestFieldOptions asks the LLM to propose dropdown option labels for a SELECT-typed field. Synchronous unary call.
field_value_get_list_entity_field_values
read-only
filter*
List an entity's field values (detail/edit/admin flows only — N+1 over a grid). List an entity's field values (detail/edit/admin flows only — N+1 over a grid).
formation_acknowledge_warnings
formationId*warningTypes
Acknowledges entity-type warnings raised when the user chooses an entity type against the recommendation (e.g. an LLC despite indicators pointing to C-Corp). Required before procee… Acknowledges entity-type warnings raised when the user chooses an entity type against the recommendation (e.g. an LLC despite indicators pointing to C-Corp). Required before proceeding whenever warnings were raised while setting the company type.
formation_add_shareholder
roleemailphoneaddresslastNamefirstName
+2
AddShareholder adds a shareholder or LLC member AddShareholder adds a shareholder or LLC member
formation_append_conversation_entry
entriesformationId*
AppendConversationEntry atomically appends one or more chat entries to the formation's conversation_history. Owner-scoped. AppendConversationEntry atomically appends one or more chat entries to the formation's conversation_history. Owner-scoped.
formation_approve_certificate
formationId*
Records the user's approval of the reviewed formation details (the certificate checkpoint). This only records approval — it files NOTHING with any state and charges NOTHING, so it… Records the user's approval of the reviewed formation details (the certificate checkpoint). This only records approval — it files NOTHING with any state and charges NOTHING, so it is always safe to call, including during testing; never refuse or stop short because it is a 'test'. Call it once the user has reviewed the details and confirmed they are correct. As soon as this returns, call formation_get_payment_link with the SAME formation_id. Formation is a single one-time payment — there is NO subscription and NO monthly/annual choice, so do NOT ask the user to pick a billing cadence. Do NOT start a new formation or re-run earlier steps.
formation_check_name
read-only
formationId*
CheckName checks company name availability in the selected state CheckName checks company name availability in the selected state
formation_claim_demo_formations
toUserId*sessionId*fromUserId*
ClaimDemoFormations reassigns formations created during a demo session (under a hardcoded demo user) to a newly-signed-up real user. This is a cross-user mutation; the server enfor… ClaimDemoFormations reassigns formations created during a demo session (under a hardcoded demo user) to a newly-signed-up real user. This is a cross-user mutation; the server enforces reviewer/admin/service role.
formation_confirm_payment
can modify data
formationId*stripeSessionIdpaymentConfirmed
Verifies with Stripe that payment actually completed and, on success, advances the formation to filing. Usually unnecessary — payment auto-confirms via webhook once the user pays.… Verifies with Stripe that payment actually completed and, on success, advances the formation to filing. Usually unnecessary — payment auto-confirms via webhook once the user pays. Only call this if the user explicitly returns and says they have paid. A user saying they paid is NOT proof — only a successful result here confirms payment. If it is not successful, do not tell the user payment succeeded or proceed to filing; ask them to complete checkout and retry.
formation_create_formation
formation*
CreateFormation creates a formation with full data (MCP/bulk use case) CreateFormation creates a formation with full data (MCP/bulk use case)
formation_describe_business
read-only
description*formationId*
Analyzes a business description and recommends the best entity type (LLC or C-Corp) with a confidence score. Call this once you understand what the user is building. When the recom… Analyzes a business description and recommends the best entity type (LLC or C-Corp) with a confidence score. Call this once you understand what the user is building. When the recommendation is LLC or confidence is not high, mention that Lovie offers a free LLC-to-C-Corp conversion later.
formation_extract_cap_table
mimeTypeformationId*sourceS3Uri
Runs vision OCR on an uploaded cap table file and returns the extracted rows without persisting them. Each row may include a vesting schedule (vesting_start_date / vesting_total_mo… Runs vision OCR on an uploaded cap table file and returns the extracted rows without persisting them. Each row may include a vesting schedule (vesting_start_date / vesting_total_months / vesting_cliff_months) for service equity held by founders, employees, and advisors. PRESERVE these vesting fields and pass them through to RecordCapTableInvestment when creating each holding — do not drop them or record such holdings as fully vested. Investor instruments (SAFE, preferred) carry no vesting.
formation_extract_cap_table_ocr
mimeTypecompanyId*sourceS3Uri
Runs vision OCR on an uploaded cap table for the active company and returns the extracted rows without persisting them. Each row may include a vesting schedule (vesting_start_date… Runs vision OCR on an uploaded cap table for the active company and returns the extracted rows without persisting them. Each row may include a vesting schedule (vesting_start_date / vesting_total_months / vesting_cliff_months) for service equity held by founders, employees, and advisors. PRESERVE these vesting fields and pass them through to RecordCapTableInvestment when creating each holding — do not drop them or record such holdings as fully vested. Investor instruments (SAFE, preferred) carry no vesting.
formation_extract_rsa_terms_ocr
agentCodecompanyId*sourceS3Uri
Runs vision OCR on an already-uploaded signed Restricted Stock Purchase/Award Agreement (RSA) PDF for the active company and returns the founder and company names plus structured t… Runs vision OCR on an already-uploaded signed Restricted Stock Purchase/Award Agreement (RSA) PDF for the active company and returns the founder and company names plus structured terms (total_shares, unvested_shares, price_per_share, grant_date, vesting_start_date / vesting_total_months / vesting_cliff_months, acceleration_clause, repurchase_right, 83(b) status, etc.) WITHOUT persisting anything. Empty string / 0 / false means the value was not stated in the document — never fabricate. Flow: first call GetOcrUploadURL with kind=RSA and upload the PDF, then call this tool with the returned source_s3_uri. To persist the grant and link the document, pass the extracted terms and the SAME source_s3_uri to CreateCapTableAgreement with type=CAP_TABLE_AGREEMENT_TYPE_RSA — preserve the vesting fields, do not drop them.
formation_extract_safe_terms
formationId*sourceS3Uri
Reads a SAFE PDF and returns its terms WITHOUT saving anything. Always call this before ImportSAFE and show the result to the user for confirmation — never import a SAFE the user h… Reads a SAFE PDF and returns its terms WITHOUT saving anything. Always call this before ImportSAFE and show the result to the user for confirmation — never import a SAFE the user has not seen. Present one block per document, largest investment first, with exactly these fields in this order: investor name, investment amount, valuation cap, discount, post-money or pre-money, date, and which existing stakeholder it will be matched to (or that a new one will be created). Then state the effect on the cap table as three figures — stakeholders, SAFEs and SAFE capital now, what this import adds, and the totals after — and ask the user to confirm. Report the confidence score and every warning verbatim in plain language rather than as codes. Two things block the import until the user resolves them: a missing date (ask for it; a SAFE is never imported without one) and a company name on the document that differs from the company being imported into (say both names and ask the user to confirm it belongs here). This is the same review the web upload screen performs, so keep the wording and order identical.
formation_generate_certificate
formationId*
Prepares the Certificate of Formation/Incorporation as a review checkpoint before filing. This is a confirmation step, NOT a downloadable document — the official, state-issued cert… Prepares the Certificate of Formation/Incorporation as a review checkpoint before filing. This is a confirmation step, NOT a downloadable document — the official, state-issued certificate is produced only after payment and state filing, so do NOT present a download link here. Summarize the formation details for the user to review, then call formation_approve_certificate only once they explicitly confirm the details are correct.
formation_get_ein_filing_info
read-only
formationId*
GetEinFilingInfo returns the stored payload without the SSN/ITIN. GetEinFilingInfo returns the stored payload without the SSN/ITIN.
formation_get_election83b_prefill
read-only
formationId*
GetElection83bPrefill returns prefilled values + missing fields for the 83(b) form, derived from the formation. Owner-scoped read. GetElection83bPrefill returns prefilled values + missing fields for the 83(b) form, derived from the formation. Owner-scoped read.
formation_get_filing_fee
read-only
state
GetFilingFee returns the state formation filing fee (table amount, formatted string, and Stripe Price id when charged via a pre-created Price). Used by the onboarding review/certif… GetFilingFee returns the state formation filing fee (table amount, formatted string, and Stripe Price id when charged via a pre-created Price). Used by the onboarding review/certificate step. Stateless lookup — no formation context required.
formation_get_formation
read-only
formationId*
Returns the full formation record for a formation_id: company name, entity type, state, business address, registered agent, share structure, shareholders, authorized party, EIN, ce… Returns the full formation record for a formation_id: company name, entity type, state, business address, registered agent, share structure, shareholders, authorized party, EIN, certificate data, payment and filing status, and timestamps. Use this to answer specific questions such as the user's EIN, registered agent, company address, or shareholders, and to RESUME an in-progress formation with a formation_id you already have — it works both before and after sign-in (do not start a new formation to resume).
formation_get_formation_document_download_url
read-only
formationId*documentType
GetFormationDocumentDownloadUrl returns a short-lived presigned S3 URL for one document on a formation, selected by FormationDocumentType: the draft certificate, the state-stamped… GetFormationDocumentDownloadUrl returns a short-lived presigned S3 URL for one document on a formation, selected by FormationDocumentType: the draft certificate, the state-stamped certificate, the post-formation bundle, or one of the three distinct EIN documents — the UNSIGNED SS-4 draft (EIN), the founder-signed SS-4 (SIGNED_EIN, which carries an SSN or ITIN), and the IRS EIN assignment letter, CP-575 (OFFICIAL_EIN). Those three are different files; "the EIN document" names none of them unambiguously. A reviewer may fetch any document of any formation. A non-reviewer reaches only formations they already own, and never an unclaimed one — knowing a formation id is not ownership. This tool is reviewer-gated on the MCP surface regardless.
formation_get_formation_info
read-only
topic
GetFormationInfo returns educational content topics or content for a specific topic GetFormationInfo returns educational content topics or content for a specific topic
formation_get_formation_purchase_quote
read-only
formationId*
GetFormationPurchaseQuote returns the CorpTools filing product, methods, parsed form schema, prefilled values, and missing required fields for a formation (non-DE/WY states). Revie… GetFormationPurchaseQuote returns the CorpTools filing product, methods, parsed form schema, prefilled values, and missing required fields for a formation (non-DE/WY states). Reviewer-only; no side effects beyond ensuring a CorpTools company record exists.
formation_get_formation_quote
read-only
state
Returns what forming a company in a given state costs: each Lovie line item, the state's filing fee, and the total, all priced live. Creates nothing and charges nothing. Use this w… Returns what forming a company in a given state costs: each Lovie line item, the state's filing fee, and the total, all priced live. Creates nothing and charges nothing. Use this whenever the user asks about price instead of quoting figures from memory — formation is a single one-time payment, so there is no plan and no monthly/annual choice to describe.
formation_get_formation_upload_url
read-only
kindmimeTypeformationId*
GetFormationUploadURL returns a presigned PUT URL for a cap table or SAFE document GetFormationUploadURL returns a presigned PUT URL for a cap table or SAFE document
formation_get_list_formations
read-only
scopefilterpageSizepageToken
Lists the SIGNED-IN user's company formations (name, entity type, state, status, progress). Requires authentication. Do NOT call this during an in-progress formation: you already h… Lists the SIGNED-IN user's company formations (name, entity type, state, status, progress). Requires authentication. Do NOT call this during an in-progress formation: you already have the formation_id from formation_start, so use formation_get_formation with that id to check the active formation. Only use this when the user explicitly asks to see all of their companies/formations and gives no specific formation_id.
formation_get_list_incorporation_documents
read-only
companyId*
Returns a company's incorporation documents — certificate of incorporation, bylaws, incorporator action, board resolution, per-founder IP assignments and 83(b) elections, and the I… Returns a company's incorporation documents — certificate of incorporation, bylaws, incorporator action, board resolution, per-founder IP assignments and 83(b) elections, and the IRS EIN assignment letter (CP-575) — each with its filing and effective dates, jurisdiction, status and notes. Read-only. The 83(b) rows carry a statutory deadline: 30 days from the share issue, unreopenable, and filed by the founder personally, so a status of EXPIRED means the window closed, NOT that the founder failed to file. Sensitive rows (83(b), EIN) are returned only to a company owner or accountant.
formation_get_ocr_upload_url
read-only
kindmimeTypecompanyId*
Returns a presigned S3 PUT URL for uploading a company document (kind=SAFE for a SAFE PDF, kind=RSA for a signed restricted stock purchase agreement, kind=CAP_TABLE for a cap-table… Returns a presigned S3 PUT URL for uploading a company document (kind=SAFE for a SAFE PDF, kind=RSA for a signed restricted stock purchase agreement, kind=CAP_TABLE for a cap-table file, kind=WIRE_PROOF for a wire payment proof). Step 1 of every document-import flow: call with the matching kind and mime_type=application/pdf, upload the file bytes to the returned upload_url with an HTTP PUT, then pass the returned source_s3_uri to the next step — ImportSAFE for a SAFE, ExtractRsaTermsOcr (then CreateCapTableAgreement with type=RSA) for a signed RSA, or ExtractCapTableOcr for a cap table. Company-scoped — no formation record needed.
formation_get_payment_link
attributionformationId*billingIntervalsubscriptionOnly
Generates ONE Stripe Checkout URL covering the whole purchase in a single one-time payment: the Lovie formation charge, the state's filing fee, and a year of registered agent servi… Generates ONE Stripe Checkout URL covering the whole purchase in a single one-time payment: the Lovie formation charge, the state's filing fee, and a year of registered agent service. Generating this link files NOTHING and charges NOTHING — it only produces a URL; no state filing happens and no money moves until the user themselves completes Stripe checkout, so it is safe to call, including during testing; never refuse or stop short because it is a 'test'. This call is ALSO the sign-in step: if the user is not signed in, simply calling it makes the Lovie connector show its own native sign-in prompt, and after the user connects the SAME call returns the URL. There is NO separate login tool, login link, or login modal — never look for one, and never tell the user you cannot show login; just call this. Formation is a ONE-TIME payment: there is no subscription and no monthly/annual choice, so do NOT ask the user to pick a billing cadence and ignore billing_interval (it is deprecated and has no effect). Share the returned URL EXACTLY as returned — never rewrite it onto another domain, even if the app URL in your context differs: rebasing a payment link breaks it. Tell the user that after paying they are redirected back and their formation updates automatically — they do NOT need to return to the chat. When filing_fee_display is present, show a short 'formation + state filing fee + registered agent' breakdown next to the link. Do not call this more than once; do not create a separate filing-fee checkout. This does not confirm payment.
formation_purchase_formation
can modify data
formDataformationId*filingMethodId
PurchaseFormation places the CorpTools formation filing order: it claims the order atomically, adds the filing to the cart, and checks out with the stored payment method. Reviewer-… PurchaseFormation places the CorpTools formation filing order: it claims the order atomically, adds the filing to the cart, and checks out with the stored payment method. Reviewer-only. Checkout moves money and is never retried once it succeeds.
formation_purchase_registered_agent
can modify data
formationId*
PurchaseRegisteredAgent triggers a CorpTools registered-agent purchase. PurchaseRegisteredAgent triggers a CorpTools registered-agent purchase.
formation_record_election83b_filing
proofmethodfiledDateformationId*proofFileNametrackingNumber
RecordElection83bFiling records that the signed election was submitted to the IRS (postmark or online), with optional proof. Owner-scoped. RecordElection83bFiling records that the signed election was submitted to the IRS (postmark or online), with optional proof. Owner-scoped.
formation_run_election83b_reminders
dryRun
RunElection83bReminders runs the 83(b) reminder sweep (not-started nudges + deadline-relative sign/file reminders + late notice). Reviewer-only; also run in-process by the schedule… RunElection83bReminders runs the 83(b) reminder sweep (not-started nudges + deadline-relative sign/file reminders + late notice). Reviewer-only; also run in-process by the scheduled cron subcommand.
formation_save_cap_table_import
editsMadeformationId*safeMatchesshareholderscapTableS3Uri
SaveCapTableImport replaces the formation's shareholders with the imported, founder-edited list SaveCapTableImport replaces the formation's shareholders with the imported, founder-edited list
formation_send_formation_email
can modify data
emailTypeformationId*filingRejectedadditionalInformationRequired
SendFormationEmail dispatches a formation lifecycle email via SendGrid. SendFormationEmail dispatches a formation lifecycle email via SendGrid.
formation_set_company_address
sourceaddressformationId*
Sets the company's business address. Always present the user with BOTH options: pass source = ADDRESS_SOURCE_OWN with a full US address if they want to use their own, or source = A… Sets the company's business address. Always present the user with BOTH options: pass source = ADDRESS_SOURCE_OWN with a full US address if they want to use their own, or source = ADDRESS_SOURCE_NEED_ASSISTANCE to give them Lovie's virtual mailbox (a real US address Lovie provides). Offer the mailbox proactively whenever the user has no address or prefers not to use a home/personal one. A real filing needs a resolvable US street, city, state, and ZIP.
formation_set_company_name
name*formationId*
Sets the company name and returns its parts: base_name, entity_ending, and the derived full_name (base + ending). Set the entity ending first with formation_set_entity_ending. Afte… Sets the company name and returns its parts: base_name, entity_ending, and the derived full_name (base + ending). Set the entity ending first with formation_set_entity_ending. After setting the name, call formation_check_name to verify availability in the selected state.
formation_set_company_type
companyTypeformationId*
SetCompanyType sets the entity type and returns any warnings SetCompanyType sets the entity type and returns any warnings
formation_set_election83b
record*formationId*
SetElection83b persists the 83(b) election snapshot on the formation. Owner-scoped; called after PDF generation + signature envelope creation. SetElection83b persists the 83(b) election snapshot on the formation. Owner-scoped; called after PDF generation + signature envelope creation.
formation_set_entity_ending
endingformationId*
Sets the company's legal entity ending — the suffix that appears in the full legal name (e.g. "Inc.", "Corporation", "Co." for a C-Corp; "LLC", "L.L.C." for an LLC). Use one of the… Sets the company's legal entity ending — the suffix that appears in the full legal name (e.g. "Inc.", "Corporation", "Co." for a C-Corp; "LLC", "L.L.C." for an LLC). Use one of the valid endings returned by formation_set_company_type. Set this BEFORE the company name so the full legal name is derived correctly.
formation_set_registered_agent
agentuseDefaultformationId*
Sets the registered agent for the formation. Pass use_default = true to use Lovie's included registered agent (recommended for most founders), or use_default = false with an `agent… Sets the registered agent for the formation. Pass use_default = true to use Lovie's included registered agent (recommended for most founders), or use_default = false with an `agent` to supply a custom one.
formation_set_share_structure
parValueuseDefaultformationId*authorizedShares
Sets the C-Corp share structure and returns the resulting total authorized capital. Pass use_default = true for the standard startup setup (10,000,000 shares at $0.0001 par), or us… Sets the C-Corp share structure and returns the resulting total authorized capital. Pass use_default = true for the standard startup setup (10,000,000 shares at $0.0001 par), or use_default = false with authorized_shares and par_value for a custom structure. C-Corp only.
formation_set_signatory
name*emailphonetitleformationId*
SetAuthorizedParty sets the authorized signatory for formation documents SetAuthorizedParty sets the authorized signatory for formation documents
formation_set_state
stateformationId*
SetState sets the state of formation (DE or WY) and returns available types SetState sets the state of formation (DE or WY) and returns available types
formation_start_formation
sourceforceNewsessionIdreferralCode
THE entry point for a new company formation — runs anonymously, no sign-in required. Call this DIRECTLY whenever the user wants to start, create, or form a company or formation. Do… THE entry point for a new company formation — runs anonymously, no sign-in required. Call this DIRECTLY whenever the user wants to start, create, or form a company or formation. Do NOT call company_get_my_companies or formation_get_list_formations first; those require auth and are only for existing records — starting a new formation needs neither. Returns a formation_id plus the ordered steps. Calling it again for the same signed-in user RESUMES the formation already in progress and returns its id with resumed=true — it does not create a second one, so a retry is safe. When resumed=true, tell the user which company you are continuing (the response carries its name) instead of assuming it is the one they just described. If they say they want a DIFFERENT, additional company, call again with force_new=true — that is the only time to set it; never set it to retry. Before walking the steps, briefly understand the user's business, experience, and funding (one question at a time), then give a tailored recommendation. Keep the formation_id and pass it to every later step. Call this exactly ONCE per formation — never start a second one to resume. When a later step needs sign-in, let the user connect and retry with the SAME formation_id; signing in automatically claims the in-progress formation, so it is never lost.
formation_submit_ein_filing_info
can modify data
info*noSsnssnItinformationId*
Collects and saves EIN (SS-4) filing information after the company is filed with the state. First ask whether the user has an SSN or ITIN; if they do not, set no_ssn and skip it —… Collects and saves EIN (SS-4) filing information after the company is filed with the state. First ask whether the user has an SSN or ITIN; if they do not, set no_ssn and skip it — the EIN then takes ~45 business days via paper filing. Collect the remaining fields conversationally: date of birth, employee counts, first wages date, closing month of the accounting year, reason for applying, any prior EIN, and principal business activity.
formation_sweep_formation_order_status
dryRun
SweepFormationOrderStatus polls CorpTools for the status of in-flight formation orders and updates each formation. Intended for the scheduled sweep (in-process subcommand) and manu… SweepFormationOrderStatus polls CorpTools for the status of in-flight formation orders and updates each formation. Intended for the scheduled sweep (in-process subcommand) and manual/dry-run admin triggering.
formation_update_formation
formation*updateMask*formationId*
UpdateFormation applies a FieldMask-scoped patch to a formation. The caller supplies update_mask.paths to select the fields to replace. UpdateFormation applies a FieldMask-scoped patch to a formation. The caller supplies update_mask.paths to select the fields to replace.
google_ads_metrics_get_google_ads_campaign_window
read-only
companyIdperiodEndcustomerIdperiodStart
GetGoogleAdsCampaignWindow aggregates each campaign over an arbitrary date range — the shape a charge is reconciled against. Distinct from the monthly list above, whose `month` key… GetGoogleAdsCampaignWindow aggregates each campaign over an arbitrary date range — the shape a charge is reconciled against. Distinct from the monthly list above, whose `month` key cannot describe a billing period that starts mid-month.
google_ads_metrics_get_list_google_ads_campaign_metrics
read-only
filterpageSizecompanyIdpageToken
List per-campaign monthly metrics for a company, with optional customer/campaign/month filtering and offset pagination. List per-campaign monthly metrics for a company, with optional customer/campaign/month filtering and offset pagination.
invoice_get_invoice
read-only
id*
invoice_get_invoice_pdf_url
read-only
invoiceId*
GetInvoicePdfUrl returns a short-lived signed S3 URL for the rendered PDF. GetInvoicePdfUrl returns a short-lived signed S3 URL for the rendered PDF.
invoice_get_list_invoices
read-only
filterpageSizepageToken
invoice_settings_get_invoice_settings
read-only
companyId*
kyc_get_kyc_status
read-only
userId*
GetKycStatus aggregates the user's inquiries into a single app-level KYC status. Safe to expose to agents. GetKycStatus aggregates the user's inquiries into a single app-level KYC status. Safe to expose to agents.
meta_ads_metrics_get_meta_ads_campaign_window
read-only
accountIdcompanyIdperiodEndperiodStart
GetMetaAdsCampaignWindow aggregates each campaign over an arbitrary date range — the shape a charge is reconciled against. GetMetaAdsCampaignWindow aggregates each campaign over an arbitrary date range — the shape a charge is reconciled against.
notification_get_list_notifications
read-only
filterpageSizepageToken
GetListNotifications lists notifications for the caller with filtering and pagination GetListNotifications lists notifications for the caller with filtering and pagination
notification_get_notification
read-only
id*
GetNotification returns a single notification owned by the caller GetNotification returns a single notification owned by the caller
payment_get_list_payments
read-only
filterpageSizepageToken
payment_get_payment
read-only
id*
saved_view_get_default_saved_view
read-only
companyId*datatableCode*
GetDefaultSavedView returns the calling user's pinned default view for a datatable (empty when none is pinned) GetDefaultSavedView returns the calling user's pinned default view for a datatable (empty when none is pinned)
saved_view_get_list_saved_views
read-only
filterpageSizepageToken
GetListSavedViews lists saved views with filtering and pagination GetListSavedViews lists saved views with filtering and pagination
saved_view_get_saved_view
read-only
id*
GetSavedView retrieves a single saved view by ID GetSavedView retrieves a single saved view by ID
shopify_orders_get_shopify_payout_orders
read-only
payoutIdcompanyIdshopDomain
GetShopifyPayoutOrders lists the orders that make up a single payout, with the payout's authoritative gross/fees/net — the shape a deposit is reconciled against. GetShopifyPayoutOrders lists the orders that make up a single payout, with the payout's authoritative gross/fees/net — the shape a deposit is reconciled against.
signature_create_envelope
signersenvelope*accessCodedocumentS3KeydocumentS3BucketreminderIntervalDays
Open a multi-signer signature envelope for an already-created company document. Prefer the composite signature_send_document_for_signature tool; this low-level primitive never retu… Open a multi-signer signature envelope for an already-created company document. Prefer the composite signature_send_document_for_signature tool; this low-level primitive never returns signing tokens.
signature_get_consent_document
read-only
consentVersionId
GetConsentDocument returns the currently effective ESIGN consent version (or a specific historical version when id is provided). GetConsentDocument returns the currently effective ESIGN consent version (or a specific historical version when id is provided).
signature_get_list_signature_envelopes
read-only
filterpageSizepageToken
signature_get_signature_envelope
read-only
envelopeId
signature_run_reminders
dryRun
RunSignatureReminders sweeps every Lovie Sign envelope that is still awaiting signature — SAFEs and plain documents alike; Docusign envelopes are excluded because Docusign runs its… RunSignatureReminders sweeps every Lovie Sign envelope that is still awaiting signature — SAFEs and plain documents alike; Docusign envelopes are excluded because Docusign runs its own reminders — and re-emails the signing link to the signers whose turn it currently is. The sweep is platform-wide, never scoped to the caller's company: it mails every tenant's pending signers and the response lists their emails. The cadence is whatever was configured per envelope when it was sent, capped at 5 (MaxRemindersPerTurn) reminders per signing turn. Each reminder rotates that signer's token, so every link emailed to them earlier stops working. Runs on the syncer cron; also reviewer-invokable for a manual sweep. dry_run reports the would-be sends without emailing, rotating, or persisting anything.
signature_signing_status
read-only
envelopeId
GetEnvelopeSigners lists an envelope's signers and their signing progress. GetEnvelopeSigners lists an envelope's signers and their signing progress.
tik_tok_ads_metrics_get_tik_tok_ads_campaign_window
read-only
companyIdperiodEndperiodStartadvertiserId
GetTikTokAdsCampaignWindow aggregates each campaign over an arbitrary date range — the shape a charge is reconciled against. GetTikTokAdsCampaignWindow aggregates each campaign over an arbitrary date range — the shape a charge is reconciled against.
transaction_categorize_transaction
companyId*transactionId*categoryOptionCode
Set a transaction's category by taxonomy option code (e.g. "ai-products", "meals", "cloud-hosting"). Applies to the sign-appropriate detail field (income vs expense) and the umbrel… Set a transaction's category by taxonomy option code (e.g. "ai-products", "meals", "cloud-hosting"). Applies to the sign-appropriate detail field (income vs expense) and the umbrella category automatically. Writes a user override that AI enrichment never overwrites, and the bookkeeping journal entry re-derives from the new category. Find valid codes via field tools (list options of the income-category / expense-category fields).
transaction_document_get_list_transaction_documents
read-only
filterpageSizepageToken
List transaction documents with filtering and pagination List transaction documents with filtering and pagination
transaction_get_list_transactions
read-only
filterpageSizepageTokensortFieldsortOrderincludeTotalCount
List transactions with filtering, sorting, and pagination Supports: filtering by account, counterparty, card, types, statuses, date range, amounts Supports: sorting by date, amount… List transactions with filtering, sorting, and pagination Supports: filtering by account, counterparty, card, types, statuses, date range, amounts Supports: sorting by date, amount, created_at, status, type (ascending or descending)
transaction_get_summary
read-only
filter*fieldIdgroupBy
Aggregate transactions into P&L groups (income/expenses) by a given dimension Aggregate transactions into P&L groups (income/expenses) by a given dimension
transaction_get_transaction
read-only
id*
Get a single transaction by ID or reference number Get a single transaction by ID or reference number
transaction_suggest_transaction_category
read-only
companyId*transactionId*
Recommend a bookkeeping category for a transaction using the platform classifier agent. Returns ranked taxonomy option codes with confidence and a short rationale; writes nothing.… Recommend a bookkeeping category for a transaction using the platform classifier agent. Returns ranked taxonomy option codes with confidence and a short rationale; writes nothing. Apply one with CategorizeTransaction.
user_get_user
read-only
idemailexternalId
GetUser returns a single user by internal id or Clerk id GetUser returns a single user by internal id or Clerk id
vendor_bill_cancel_vendor_bill
can modify data
vendorBillId*
Cancel an open vendor bill so it no longer counts as an open payable. Only OPEN bills can be cancelled; a bill already paid or cancelled cannot. Cancel an open vendor bill so it no longer counts as an open payable. Only OPEN bills can be cancelled; a bill already paid or cancelled cannot.
vendor_bill_create_vendor_bill
vendorBill*
vendor_bill_get_list_vendor_bills
read-only
filterpageSizecompanyId*pageToken
vendor_bill_get_vendor_bill
read-only
id*
vendor_bill_mark_vendor_bill_paid
paidDatevendorBillId*
x_ads_metrics_get_x_ads_campaign_window
read-only
accountIdcompanyIdperiodEndperiodStart