From carta-fund-admin
Generate tearsheet PDFs for one or more portfolio companies via the Carta MCP server. For a single portco, generates an immediate PDF preview returned as an embedded resource. For multiple portcos, starts a bulk job, polls until complete, and presents a ZIP download link. Trigger phrases: "generate tearsheet", "download tearsheet", "tearsheet for portco", "bulk tearsheets", "tearsheets for all portcos", "preview tearsheet", "generate tearsheet PDF", "create tearsheet", "download tearsheet package", "tearsheet zip", "download all tearsheets", "Investment Summary", "Fund Summary", "Tear Sheet", "generate Investment Summary", "download Fund Summary", "create Tear Sheet", "generate reports for portcos", "batch tearsheets", "tearsheets for all companies". Also trigger when the user asks to generate or download a document whose name could match a tearsheet template for one or more portfolio companies.
npx claudepluginhub carta/pluginsThis skill uses the workspace's default tool permissions.
Generate tearsheet PDFs for one or more portfolio companies using the Carta MCP server.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Generates images from structured JSON prompts via Python script execution. Supports reference images and aspect ratios for characters, scenes, products, visuals.
Generate tearsheet PDFs for one or more portfolio companies using the Carta MCP server. The skill presents available templates and portfolio companies interactively, then routes to the appropriate workflow based on how many portcos are selected:
Ensure a firm context is active. If this is your first MCP call in the session, or if subsequent calls fail with a firm/context error:
list_contexts to see which firms are accessible.set_context with the target firm_id.You do not need to ask the user for a firm UUID — the MCP session tracks the active firm.
Call:
fetch("fund:list:tearsheet_templates", {})
If the user mentioned a document name (e.g. "Investment Summary", "Fund Summary",
"Tear Sheet"): match it against the template name field (case-insensitive, partial match).
Match found: Confirm with the user:
"Found template 'Investment Summary' — is this the one you want?"
If yes, store it and continue. If no, show the full table.
No match found: Tell the user, then show the full table:
"No template named 'Investment Summary' was found for this firm. Here are the available templates — which one would you like to use?"
If no document name was mentioned:
One template: Confirm with user before proceeding.
Multiple templates: Show table, ask user to select by number:
| # | id | Name | Orientation | Grain Level | Description |
|---|----|------|-------------|-------------|-------------|
| 1 | aaa-... | Q4 2024 Standard | landscape | fund | — |
| 2 | bbb-... | Annual Summary | portrait | company | Annual LP report |
Store as TEMPLATE_UUID (the template id) and TEMPLATE_NAME.
Call:
fetch("fund:list:portfolio_companies", {})
The command returns an array of portfolio companies. Each item includes name,
entity_link_id, and fund_uuid.
Group them by fund_uuid and display a numbered table:
## Acme Fund I
| # | Company Name | entity_link_id | fund_uuid |
|---|--------------|----------------|-----------|
| 1 | Portco Alpha | el-uuid-1 | fund-uuid-1 |
| 2 | Portco Beta | el-uuid-2 | fund-uuid-1 |
## Acme Fund II
| # | Company Name | entity_link_id | fund_uuid |
|---|--------------|----------------|-----------|
| 3 | Portco Gamma | el-uuid-3 | fund-uuid-2 |
Ask the user to choose:
After the user selects portcos:
FUND_BREAKDOWNS and proceed to Bulk Flow.Store the selected portco's fund_uuid and entity_link_id.
Tell the user: "Generating tearsheet — this may take up to 2 minutes..."
Call:
fetch("fund:get:tearsheet_preview", {
"template_uuid": "<TEMPLATE_UUID>",
"fund_uuid": "<FUND_UUID>",
"entity_link_id": "<ENTITY_LINK_ID>"
})
The command returns the PDF as an embedded resource in the MCP response.
Report to the user:
Your tear sheet is ready!
The PDF has been returned as an embedded resource in this response.
Save it from your interface or ask me to retry if nothing appeared.
Template: <TEMPLATE_NAME>
Company: <PORTCO_NAME>
On failure: Surface the full error. Common causes:
list_contexts and set_context first.Never retry automatically.
Build FUND_BREAKDOWNS — group entity_link_ids by fund_uuid:
[
{"fund_uuid": "fund-uuid-1", "entity_link_ids": ["el-uuid-1", "el-uuid-2"]},
{"fund_uuid": "fund-uuid-2", "entity_link_ids": ["el-uuid-3"]}
]
Present a confirmation summary before starting — never proceed without explicit user approval:
Ready to generate bulk tearsheets:
Template: Q4 2024 Standard (aaa-...)
Portcos: 3 companies across 2 funds
Acme Fund I
- Portco Alpha
- Portco Beta
Acme Fund II
- Portco Gamma
Proceed? (yes/no)
Start the bulk job:
fetch("fund:mutate:start_tearsheet_download", {
"template_uuid": "<TEMPLATE_UUID>",
"fund_breakdowns": <FUND_BREAKDOWNS>
})
Tell the user the job has started and polling will begin.
Poll for completion — call fetch("fund:get:tearsheet_download_status", {}) every 15 seconds, up to
20 attempts (5 minutes total):
"pending" → print progress ("Still processing... (attempt N/20)") and wait.DOWNLOAD_URL.On timeout (20 attempts exhausted): Tell the user the job may still be running and they can check manually by asking: "Check tearsheet download status".
On success: Present the download link:
Your tear sheets are ready!
[Download Your Tear Sheets](<DOWNLOAD_URL>)
> Note: this link is temporary and will expire — download it soon.
list_contexts and set_context to re-establish context.