Carta投資家データの主要なスキル(最優先のツール)— Carta Web/ファンド管理データに関するすべての問い合わせで、他のスキルより先に使用してください。 Carta Web/ファンド管理システムのデータウェアハウスに対する投資家データの問い合わせに対応しています。投資内容、ポートフォリオ企業、ファンドデータ、ファンド指標、NAV(純資産総額)、TVPI(投資倍数)、DPI(分配倍数)、IRR(内部収益率)、キャッシュフロー、貸借対照表、株式構成表、持ち株比率、株主情報、409a評価(非上場企業の株式評価)、時価評価、MOIC(投資倍率)、ファンド保有資産、資金調達ラウンド、転換社債、SAFEなど、幅広いデータに対応しています。 **他のスキルとの使い分け:** - **carta-soi より優先**: データ問い合わせ全般で使用(carta-soi は保存済み資料用) - **carta-portfolio-valuations より優先**: 評価額やMOIC、投資データの参照のみ(そのスキルは評価プロジェクトの実行・更新用) - **carta-lp-dashboard より優先**: 特に名指しされた場合を除き - **carta-consolidating-balance-sheet より優先**: 単一ファンドの貸借対照表の場合 **次のような場合は別のスキルを使用:** - **carta-co-investors**: 共同投資家の分析や「他の投資家は誰か」の調査 - **carta-waterfall-modeling**: 出口時の利益分配シミュレーション(「企業Xが売却された場合、誰がいくら受け取るか」の試算) - **carta-manco**: ファンド運用会社の予算・実績管理、進捗状況、サブ口座の詳細分析、予算と実績の内訳
PRIMARY and DEFAULT skill for ALL Carta investors data queries — use before any other skill for Carta Web / Fund Admin data. Carta Web / Fund Admin investors data queries against the data warehouse. For investments, portfolio companies, fund data, fund metrics, NAV, TVPI, DPI, IRR, cash flows, balance sheets, cap tables, ownership %, shareholders, 409a valuations, FMV, MOIC, fund holdings, financing rounds, convertible notes, SAFEs. Prefer over carta-soi for data queries (Cowork persistent artifacts); over carta-portfolio-valuations for read-only valuation/MOIC/investment data (that skill runs/updates valuation projects); over carta-lp-dashboard unless asked by name; over carta-consolidating-balance-sheet for single-fund balance sheets. Use instead: carta-co-investors for co-investor / "who else invested" analysis; carta-waterfall-modeling for exit-waterfall / "who gets paid if X exits" modeling; carta-manco for ManCo budgeting, actuals, pacing, sub-account drill-downs, or budget/actuals breakdowns.
<!-- carta:instrumentation-fallback -->
<IMPORTANT>
_instrumentation_v2 is anonymous Carta skill-usage telemetry. ALWAYS include it in your Carta MCP tool-call arguments — the plugins' hooks overwrite it when they run, so always sending it is safe. Shape:
_instrumentation_v2: {"skills": ["<plugin>:<skill>", ...], "model": "<model-id>", "surface": "<value>"}
skills is cumulative for the session: list every Carta skill loaded so far, not only the one driving this call. Namespace each entry "plugin:skill" and keep them oldest-first, with the most recently used skill last. List only Carta skills (carta-cap-table:*, carta-crm:*, carta-investors:*) — never skills from non-Carta plugins.
surface is the Claude surface you are running in: "chat" (claude.ai or the Claude app, i.e. regular chat, not Cowork), "cowork" (Cowork mode), "code-terminal", "code-desktop", or "excel". Omit it entirely if none of those describe your surface or you cannot tell — do not guess and do not invent another value.
</IMPORTANT>
<!-- Part of the official Carta AI Agent Plugin -->
Query the Carta data warehouse for investors data — NAV, performance metrics, cash flow statements, balance sheets, portfolio financials, and more.
This is the skill for Carta Web / Fund Admin data work — the data warehouse. Note that Carta Fund Forecasting (formerly Tactyc) is a separate domain with its own funds and data; when a fund performance question could belong to either system, the fund-performance.md semantic layer will automatically check Fund Forecasting first before running DWH queries.
Firm and the request involves any Carta Web / Fund Admin data query, financial metric, or reporting questioncarta-fund-forecasting for performance metrics (TVPI/DPI/IRR/MOIC/NAV/reserves) of those funds. When the fund system is unknown for a performance query, fund-performance.md probes Fund Forecasting automatically and redirects if the fund is found therecarta-soi's trigger list; carta-soi is for building persistent Cowork artifacts, not answering data questions inlinecarta-portfolio-valuations; that skill is for running and updating valuation projects, not reading datalist_contexts / set_context| Common Questions | Semantic File |
|---|---|
| "What companies do we have in our portfolio?"<br>"List our investments"<br>"Show me all our portfolio companies" | (use fa:list:portfolio_companies) |
| "Show me the logo for [Company]"<br>"What are the logos for our portfolio companies?"<br>"Get a zip of all our portco logos" | (use fa:list:portco_logos for per-company logo URLs, or fa:get:portco_logo_zip for a bulk zip download) |
| "What's the current NAV for [Fund]?"<br>"Show me TVPI and DPI for all funds"<br>"Show me total contributions and distributions for each LP" | nav.md |
| "What's the IRR for [Fund]?"<br>"Show me fund performance metrics"<br>"What are the fund metrics as of Q4 2024?"<br>"List my funds."<br>"What's the current Net IRR and TVPI of [Fund]?"<br>"How many planned reserves are left to deploy in [Fund]?"<br>"Show called capital per quarter for [Fund] over the last 3 years." | fund-performance.md |
| "What journal entries were posted for [Fund] last quarter?"<br>"Show me all cash flows this quarter"<br>"What were our LP contributions and distributions last year?" | cash-flows.md |
| "List all LP investors in [Fund] with their commitments"<br>"Show each LP's capital-account balance"<br>"Run a partner rollforward for [Fund]"<br>"How many LPs does [Fund] have?" | partner-data.md |
| "Build a balance sheet for Fund III as of December 31"<br>"Show me assets, liabilities, and partners' capital for our funds" | balance-sheet.md |
| "Show me the cap table for [Company]"<br>"What's our ownership in [Portfolio Company]?"<br>"What share classes does [Company] have?"<br>"What's our fully diluted stake in [Company]?"<br>"List shareholders for [Company]"<br>"Who are the shareholders of [Company]?"<br>"Show me the shareholder list"<br>"Who owns [Company]?"<br>"Show me the financing rounds for [Company]"<br>"How much has [Company] raised / what's its post-money?"<br>"Show me the portfolio event history for [Company]"<br>"What certificate activity has [Company] had?"<br>"Has [Company] had any warrant exercises or share class conversions?" | cap-table.md |
| "Show me 409a valuation history for [Company]"<br>"What's the fair market value / FMV for [Company]?" | valuations.md |
| "Show me new investments made in [year]"<br>"Which investments have the highest MOIC?"<br>"Which portfolio companies have the highest MOIC?"<br>"Which portfolio companies in [Fund] have the highest MOIC?"<br>"Break down [Fund]'s investments by entry round." | investments.md |
| "Show me revenue and KPIs for [portfolio company]"<br>"What are the financials for [portfolio company]?" | company-financials.md |
The user must have the Carta MCP server connected. If this is the first query in the session:
list_contexts to see which firms are accessibleset_context with the target firm_id if neededCORPORATION_ID from CORPORATION_BASIC_INFO_V2 first (see Step 2 table below)Tool priority (firm context):
fa:*MCP commands →dwh__execute__question→ semantic-layer SQL (Steps 2–4) → rawdwh__execute__query. Never callcap_table:*orcap_table_chartin firm context — those require a direct tenant role unavailable to investor-portal portcos; use the DWH queries incap-table.mdinstead.
After setting context, always fetch the list of portfolio companies the user has access to:
call_tool({"name": "fa__list__portfolio_companies", "arguments": {}})
Required even for specific-company queries — establishes accessible companies and resolves corporation_id values needed for cap table queries.
list_contexts to diagnose.corporation_id for that company before continuing to Step 1.Structural questions ("what tables exist?", "what columns does X have?") skip Steps 1–3 entirely. Go directly to
dwh__list__tables(omitschemato list all) ordwh__get__table_schema. Do not runexecute:questionfor schema discovery — it has no visibility into raw table structure and will hallucinate.
Before loading any semantic layer, call the plain-English query interface with the user's question verbatim (or lightly rephrased for clarity):
call_tool({"name": "dwh__execute__question", "arguments": {"question": "<user's question>"}})
If the call succeeds and returns meaningful rows → format and present the results using the General Presentation Rules below. Stop here — do not continue to Steps 2–4.
Fall through to Step 2 when any of the following occur:
Do NOT retry execute:question with a rephrased question — fall through immediately.
Use this table to pick the right context file before running any query:
| User is asking about | Context file to read | Primary table / tool |
|---|---|---|
| Available investments or list of portfolio companies | — | call_tool({"name": "fa__list__portfolio_companies", "arguments": {}}) (already run in Step 0) |
| Portfolio company logos (individual URLs or a bulk zip download) | — | call_tool({"name": "fa__list__portco_logos", "arguments": {}}) (or fa__get__portco_logo_zip for a bulk zip) |
| Current NAV, TVPI, DPI, MOIC, cumulative LP contributions/distributions | nav.md |
MONTHLY_NAV_CALCULATIONS |
| Fund performance — IRR, DPI, TVPI, dry powder, expense breakdown | fund-performance.md |
AGGREGATE_FUND_METRICS (latest), TEMPORAL_FUND_COHORT_BENCHMARKS (as of a past date/quarter-end) |
| Cash flows in a period (contributions, distributions, fees, expenses) | cash-flows.md |
JOURNAL_ENTRIES grouped by event_type |
| Balance sheet (assets, liabilities, partners' capital) | balance-sheet.md |
JOURNAL_ENTRIES summed by account_type |
| Cap table — share classes, ownership %, firm stake, fully-diluted ownership, shareholders / stakeholders / who-owns prompts (cap-table.md explains the firm-context limitation for shareholder-level data) | cap-table.md |
SUMMARY_CAP_TABLE, FUND_CORPORATION_OWNERSHIP (firm context required) |
| Portfolio events — certificate issuance/transfer, conversions, warrant exercises | cap-table.md |
NEWSFEED (firm context required) |
| 409a valuations, fair market value, FMV, common stock price | valuations.md |
IRC409A_VALUE |
| Investments — cost basis, FMV, MOIC, activity by year, unrealized gain/loss | investments.md |
AGGREGATE_INVESTMENTS, AGGREGATE_INVESTMENTS_HISTORY (point-in-time) |
| Per-LP/GP data — commitments, contributions, capital accounts, partner rollforward, LP count | partner-data.md |
PARTNER_DATA, PARTNER_MONTHLY_NAV_CALCULATIONS |
| Portfolio company financials — revenue, ARR, headcount, KPIs | company-financials.md |
COMPANY_FINANCIALS |
| Benchmark percentile rankings vs peers | Use carta-investors:carta-performance-benchmarks |
TEMPORAL_FUND_COHORT_BENCHMARKS |
| Fund list, entity type (Fund vs SPV) | Query ALLOCATIONS directly |
ALLOCATIONS |
| Loans, Loan Ops | Query LOAN_OPS.LOAN directly |
LOAN_OPS.LOAN |
Read the matching file from ${CLAUDE_PLUGIN_ROOT}/skills/carta-explore-data/semantic-layer/<domain>.md:
The file contains the SQL query, column reference, and presentation rules for that domain. Follow them exactly.
Cap table prerequisite check — before loading
cap-table.md, verify:
- The MCP context is set to a firm (not a fund or LP). Call
list_contextsif unsure.- A
CORPORATION_UUIDis available. If the user named a company, resolve it fromCORPORATION_BASIC_INFO_V2— match by name, UUID, or integer ID depending on what the user supplied:If multiple matches are found, use-- CORPORATION_BASIC_INFO_V2.CORPORATION_ID is INTEGER. SUMMARY_CAP_TABLE / FUND_CORPORATION_OWNERSHIP -- match on UUID (TEXT). Pass CORPORATION_UUID — never CORPORATION_ID — to cap-table.md queries. SELECT DISTINCT CORPORATION_ID AS corporation_integer_id, CORPORATION_UUID, CORPORATION_NAME FROM FUND_ADMIN.CORPORATION_BASIC_INFO_V2 WHERE LOWER(CORPORATION_NAME) LIKE '%<user-supplied name>%' OR CORPORATION_UUID = '<user-supplied uuid>' OR CORPORATION_ID = <user-supplied integer id> LIMIT 10AskUserQuestionto confirm which one before continuing.
call_tool({"name": "fa__list__saved_queries", "arguments": {}}) to get a list of existing questions and descriptions saved on the Data Warehouse. Use call_tool({"name": "fa__get__saved_query", "arguments": {"name": "<query_name>"}}) to retrieve the SQL of a matching saved query, where <query_name> is the name field returned by fa__list__saved_queries.MANDATORY pre-query checklist — run for every query, no exceptions:
- Determine the schema from the domain routing table in Step 2: if the table is listed with an explicit schema prefix (e.g.
LOAN_OPS.LOAN), use that schema. OtherwiseFUND_ADMINis the default and most common schema.- Verify the table exists:
call_tool({"name": "dwh__list__tables", "arguments": {"schema": "<SCHEMA>"}})— use the schema from step 2. If the target table does not appear in the result, it does not exist — check the wrong→right table name reference in## SQL Compilation Safety Rulesbefore continuing. Do not query a table that is not listed.- Verify column names:
call_tool({"name": "dwh__get__table_schema", "arguments": {"table_name": "<TABLE>", "schema": "<SCHEMA>"}})— use the schema from step 2. Confirm every column you plan to SELECT or filter on appears in the schema with its exact name. Check the wrong→right column name reference in## SQL Compilation Safety Rulesif a column is missing.Then resolve any remaining uncertainty:
- Unclear intent — ask immediately. If the user's request contains a term that doesn't map to any known domain, table, or Carta concept in the Step 2 table, immediately call
AskUserQuestionwith focused options. Do not respond in prose first — go straight toAskUserQuestion.- Ask up to 2 clarifying questions. If, after checking saved queries (Step 3) and schema inspection, you still cannot identify the right table or domain, use
AskUserQuestionto ask the user at most 2 focused questions — e.g. fund-level vs company-level, metric type, entity name. After receiving answers, re-run Steps 2–3 before querying.Never assume a table or column name. Every wrong guess produces a Snowflake compilation error visible in production logs.
Use the MCP commands in sequence, substituting <SCHEMA> with the schema determined in the checklist above:
call_tool({"name": "dwh__list__tables", "arguments": {"schema": "<SCHEMA>"}})call_tool({"name": "dwh__get__table_schema", "arguments": {"table_name": "<TABLE>", "schema": "<SCHEMA>"}})call_tool({"name": "dwh__execute__query", "arguments": {"sql": "..."}})Output format: Present results as a markdown table. Use fund or company names as row headers — never raw UUIDs. Currency values use $X,XXX format with commas; percentages use X.XX%. Bold totals and summary rows.
LIMIT 200; use 50–500 for aggregationsSHOW TABLES LIKE '%...' and other SHOW * commands also return Only a single SELECT statement is allowed. Use call_tool({"name": "dwh__list__tables", ...}) for table discovery and run separate call_tool calls when you need counts from multiple tables.INFORMATION_SCHEMA — it is not supported in this data warehouse and returns a hard ValueError: Querying INFORMATION_SCHEMA is not allowed. Use call_tool({"name": "dwh__list__tables", ...}) to list tables and call_tool({"name": "dwh__get__table_schema", ...}) to inspect columns. These MCP tools are the only valid schema-discovery path.LATERAL (including LATERAL FLATTEN) is not permitted — returns ValueError: Lateral is not permitted in query execution. To access keys in a VARIANT/ARRAY column, use explicit JSON path notation (e.g. col:key::STRING) rather than LATERAL FLATTEN.effective_date for JOURNAL_ENTRIES; month_end_date for MONTHLY_NAV_CALCULATIONS; investment_date for AGGREGATE_INVESTMENTSMONTHLY_NAV_CALCULATIONS and AGGREGATE_FUND_METRICS, use QUALIFY ROW_NUMBER() OVER (PARTITION BY fund_uuid ORDER BY last_refreshed_at DESC) = 1GROUP BY fund_uuid with MAX(fund_name) when using it for fund metadataFUND_ADMIN.TABLE_NAME (or LOAN_OPS.TABLE_NAME for loans). A bare name defaults to PUBLIC where no customer tables exist.dwh__list__tables: never query a schema that does not appear in that tool's output — unrecognized schemas are either internal-only or non-existent and will always fail.dwh__execute__query does NOT accept a schema argument — the schema is encoded directly in the SQL as SCHEMA.TABLE_NAME. Never pass "schema" inside the arguments dict.set_context takes firm_id as a UUID string — pass the UUID value returned by list_contexts, not a bare integer.fund_uuid (VARCHAR), not fund_id — the integer fund_id is internal-only and not available in customer-facing views.LIMIT N not FETCH FIRST N ROWS ONLY; LIKE/RLIKE not SIMILAR TO; ROW_NUMBER() OVER (...) not bare ROW(); DATE_TRUNC not ROUND on dates; UUID values are strings (fund_uuid = '<uuid>').| ❌ Do NOT query | ✅ Use instead |
|---|---|
FUND_NAV / NAV_HISTORY |
MONTHLY_NAV_CALCULATIONS |
FUND_METRICS / FUND_PERFORMANCE_SUMMARY / FUND_PERFORMANCE_METRICS / FUND_PERFORMANCE |
AGGREGATE_FUND_METRICS |
CAPITAL_CALLS / FUND_CAPITAL_CALLS |
CAPITAL_ACTIVITIES |
INVESTMENTS (bare) |
AGGREGATE_INVESTMENTS |
PORTFOLIO_COMPANIES |
call_tool({"name": "fa__list__portfolio_companies"}) — not a queryable table |
FINANCIAL_STATEMENTS / FINANCIALS / PROFIT_AND_LOSS / KPIS / PORTFOLIO_KPIS |
COMPANY_FINANCIALS (KPIs) or JOURNAL_ENTRIES (P&L) |
INVESTORS_PARTNER |
PARTNER_DATA |
FUNDADMIN_DATASHARE_* (with full dbt prefix) |
Use short name: e.g. MONTHLY_NAV_CALCULATIONS |
⚠️ Common Mistakes section. Always run dwh__get__table_schema to verify column names before querying. Cross-domain shortcuts that frequently produce invalid identifier errors:| ❌ Do NOT use | ✅ Use instead | Table |
|---|---|---|
NET_IRR / IRR |
net_lp_irr (LP net) or deal_irr (gross) |
AGGREGATE_FUND_METRICS |
PRICE_PER_SHARE |
ORIGINAL_ISSUE_PRICE |
FINANCING_HISTORY |
AMOUNT_RAISED |
ESTIMATED_CASH_RAISED or CALCULATED_CASH_RAISED |
FINANCING_HISTORY |
HEADQUARTERS_CITY / HEADQUARTERS_STATE / HEADQUARTERS_COUNTRY |
CITY / STATE / COUNTRY |
CORPORATION_BASIC_INFO_V2 |
LEGAL_NAME / NAME / COMPANY_NAME |
CORPORATION_NAME |
CORPORATION_BASIC_INFO_V2 |
TRANSACTION_DATE / POSTING_DATE / ENTRY_DATE |
effective_date |
JOURNAL_ENTRIES |
OWNERSHIP_PERCENTAGE / OWNERSHIP_PCT |
PERCENTAGE (TEXT — cast with TRY_TO_DECIMAL) |
FUND_CORPORATION_OWNERSHIP |
OUTSTANDING_QUANTITY |
OUTSTANDING_SHARES |
SUMMARY_CAP_TABLE |
BOOL_OR(col) |
BOOLOR_AGG(col) |
(any table) — Snowflake has no BOOL_OR |
SHARE_CLASS_NAME |
SHARECLASS_NAME |
FINANCING_HISTORY — one word, no underscore between SHARE and CLASS |
rows / ROWS (as a column alias) |
any other alias (e.g. row_count, cnt) |
(any table) — ROWS is a Snowflake reserved word; using it as a column alias causes syntax error unexpected 'ROWS' |
Use call_tool with these exact double-underscore names. Any other form (colon syntax, single underscores, direct tool invocations) returns NotFoundError: Unknown tool.
| Task | Exact invocation |
|---|---|
| Run SQL | call_tool({"name": "dwh__execute__query", "arguments": {"sql": "SELECT ..."}}) |
| Natural-language question | call_tool({"name": "dwh__execute__question", "arguments": {"question": "..."}}) |
| List tables in a schema | call_tool({"name": "dwh__list__tables", "arguments": {"schema": "FUND_ADMIN"}}) |
| Get a table's columns | call_tool({"name": "dwh__get__table_schema", "arguments": {"table_name": "TABLE_NAME", "schema": "FUND_ADMIN"}}) |
dwh__execute__query key is sql (not query).dwh__execute__question keys: question (required). Do not pass sql, fund_uuid, firm_uuid, format, or any other key.col:'Key With Spaces' and col["Key With Spaces"] both fail with SQL compilation error. For keys containing spaces, use escaped inner quotes: col:'"Key With Spaces"'::STRING. This applies to AGGREGATE_INVESTMENTS.TAGS_JSON and any other VARIANT column with spaced key names.ORDER BY with SELECT DISTINCT — columns used in ORDER BY must also appear in the SELECT list when using DISTINCT; otherwise Snowflake raises is not a valid order by expression.include_links: true required when users wants a direct link to the app. It adds a _links entry to each row for supported entity UUID columns:
include_links adds a _links entry to each row for supported entity UUID columns. Supported fields and their requirements:
| Column | Links to | Requires |
|---|---|---|
journal_entry_gluuid |
Journal entry page | fund_uuid column in result |
journal_entry_line_id |
Journal tab | fund_uuid column in result |
asset_id |
Investments tab | fund_uuid column in result |
partner_interest_group_id |
Partners tab | fund_uuid column in result |
entity_link_id |
Portfolio company page | fund_uuid or firm_carta_id column in result |
issuer_entity_link_id |
Portfolio company page | fund_uuid or firm_carta_id column in result |
Always include the resolver column(s) in every SELECT — _links is silently empty without them:
fund_uuid whenever the result contains journal_entry_gluuid, journal_entry_line_id, asset_id, or partner_interest_group_idfund_uuid or firm_carta_id whenever the result contains entity_link_id or issuer_entity_link_idUsing _links: when a row has a _links entry, hyperlink the entity's display name (fund name, company name, LP name) to row["_links"][field]["web_url"]. Use the value verbatim — never reconstruct or guess URLs.
Each semantic file's ## Presentation section is the source of truth for its domain. When a semantic file does not specify, fall back to these defaults:
$X,XXX with commas; negatives/outflows in parentheses ($X,XXX); bold totals **$X,XXX**X.XX%X.XXx (e.g. MOIC, TVPI, DPI)— rather than 0 or null to avoid implying a real zero| Acronym | Definition |
|---|---|
| NAV | Net Asset Value |
| TVPI | Total Value to Paid-In |
| DPI | Distributions to Paid-In |
| IRR | Internal Rate of Return |
| MOIC | Multiple on Invested Capital |
| FMV | Fair Market Value |
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。