Cartaという顧客管理システムのホーム画面を表示します。パイプライン(営業段階別の案件一覧)、最近連絡した相手、案件、オブジェクト数、最新のメモ、今週の会議、このプラグインが対応するプロンプト(質問例)の一覧などが表示されます。 **次のような場合に使用:** 「carta crm home」「crm ホーム画面を表示」「ダッシュボードを見たい」「今日のパイプラインを確認」「crm の着陸ページ」「/home」といったユーザーの指示 **重要な注意事項:** - このスキルは、ホーム画面を会話内に表示するべきか、公開ページにするべきかを判断します。ユーザーがページを望んでいる場合でも、まずここから始めてください。 - 読み取り専用です。特定のレコード(記録)を検索する目的では使わないでください。その場合は、レコード名を直接指定すれば Claude が適切な検索スキルを自動選択します。 - 投資ファンドの場合は「carta-investors」の「carta-home-build」を使用してください。 - 企業の資本構成表(出資者や株主の一覧)の場合は「carta-cap-table」の「carta-captable-home-build」を使用してください。
Renders the Carta CRM Home: a landing view with pipeline by stage, recent contacts, deals, object counts, latest notes, this week's meetings, and a directory of the prompts the plugin supports. Use this skill when the user says things like "carta crm home", "show my crm home", "my crm dashboard", "what's in my pipeline today", "crm landing page", or "/home". It is also the skill that decides whether the Home belongs in the conversation or on a published page, so start here even when the user may want a page. Read-only. Do NOT use it to look up a specific record — name the record instead and Claude picks the right search skill. For a fund firm's Carta Home use carta-investors' carta-home-build; for a company's cap table use carta-cap-table's carta-captable-home-build.
<!-- carta:instrumentation-fallback -->
<IMPORTANT>
_instrumentation_v2 は、Cartaスキル使用の匿名トラッキング(利用状況の記録)です。Carta MCPツール呼び出し時の引数に必ず含めてください。プラグインのフックが実行時に上書きするため、常に送信しても安全です。形式:
_instrumentation_v2: {"skills": ["<plugin>:<skill>", ...], "model": "<model-id>", "surface": "<value>"}
skills はセッション通算です。現在のスキルだけでなく、これまでに読み込まれたCartaスキルをすべてリストアップしてください。各エントリを "plugin:skill" の形式で名前空間を付け、古い順に並べ、最後に最近使ったスキルを配置します。Cartaスキルのみ(carta-cap-table:*、carta-crm:*、carta-investors:*)をリストアップしてください。非Cartaプラグインのスキルは含めないでください。
surface はClaudeが実行されているサーフェス(利用環境)です: "chat"(claude.aiまたはClaudeアプリ、つまり通常のチャット。Coworkではない)、"cowork"(Coworkモード)、"code-terminal"、"code-desktop"、"excel"。これらに当てはまらないか判断できない場合は、完全に省略してください。推測や新しい値を作成してはいけません。
</IMPORTANT>
ホームはマニフェスト(利用可能機能の一覧)ツール1つと、それを表示する2つの場所で構成されています。サーバーが、どのカード(情報パネル)をこの組織が見られるか決定し、ビュー(表示機能)が各カードを取得します。あなたの役割は、マニフェストを読み込み、新規ユーザーをチュートリアルに案内し、ホームをどこに表示するか判断し、レンダリング(描画)することです。
表示する前に、まずデータを取得してください:
crm_call_tool({ "name": "crm:get_crm_home", "arguments": {} })
何も描画する前に、内容をデータとして読み込んでください。ステップ2でユーザーを別の場所に案内する可能性があり、描画した後に消えることより、最初から描画しない方が良いからです。
ホームはロールアウトフラグ(段階的な機能公開)の背後にあります。フラグがオフの場合、サーバーは get_crm_home を登録せず、呼び出しは「ツールが見つからない」エラーで失敗します。これは失敗ではなく、ロールアウト外の組織では正常な応答です。
次のステップは、ユーザーが何を求めているかで異なります。
| ユーザーの要望 | 対応方法 |
|---|---|
ホーム本体、ダッシュボード、または /home |
ホームがこの組織で有効化されていないことを伝え、代わりに何が利用できるか提案する |
| カードが表示する情報、例えば「今日のパイプラインに何がある?」 | その機能を所有するスキル(ここでは search-deals)で質問に答える。ホームについては言及しない |
下の行が重要です。「今日のパイプラインに何がある?」のような表現は、プラグインが既に答えられる実際の質問なので、「ホームがオフ」と答えるとユーザーが以前は得られていた情報を失うことになります。
代わりのホームを自分で組み立てないでください。 search_deals、search_tasks、list_calendar_events などを呼び出してカード群を模倣してはいけません。特定のスキルに質問を渡すのは良いことです。なぜなら、そのスキルは独自のアクセスチェックを実行するからです。しかし、ホームのようなパネルを自分で構築すると、カードゲーティング(アクセス制限)が実行されないため、組織が見るべきでない情報を表示する可能性があります。
マニフェストは firstTimeUser を含みます。これが true の場合、ユーザーはCRM MCPに新しいか、しばらく使っていません。
ホームを描画する代わりに、tutorial スキルを呼び出してください。 その前に1行言葉をかけて、リダイレクトが間違いのように見えないようにしてください:
まずプラグインの使い方を説明させてください。ホームはその後で待っています。
チュートリアルの終了時にホームが描画されるため、誰もホームを得られなくなることはありません。ホームを自分で描画しないでください。
firstTimeUser が false またはない場合、ステップ3に進んでください。
2つの場所があり、同等ではありません:
carta-crm-home-build スキルがユーザーがブックマークして再度開ける安定URLで公開します。このページは以下の両方が当てはまる場合のみ利用可能なため、下記のルールが実行される前に確認してください:
Artifact(成果物)ツールが存在すること。これなしではこのサーフェスは公開できません。carta-crm-home-build スキルがインストールされていること。今のところ内部向けなので、公開インストールにはこれが含まれず、公開ビルドに到達できません。両者を確認できない場合は、常にページを利用不可として扱ってください。このサーフェスが作成できないページの名前は出さず、見たことのないスキルを呼び出さないでください。
この順序で判断し、最初に答えが出たら止まってください。
1. ユーザーが求めたもの。 「CRM ホームを公開する」「ピンする」「ブックマークできるリンクをくれ」などのビルドまたは公開動詞がページを指定します。ページが利用可能な場合、carta-crm-home-build を呼び出し、ここでは描画しないでください。利用不可の場合、ブックマーク可能なページはこのサーフェスで利用できないこと1行で言及し、チャット内に描画します。単なる「CRM ホームを見せて」はどちらの対象も指定しないため、先に進んでください。ビルド動詞は、不在のスキルを呼び出す理由ではありません。
2. このセッションでユーザーが既に伝えたもの。 既に選択済みの場合、その対象がまだ利用可能な限り、もう聞かずに従ってください。このサーフェスが対応できない対象への記録された選択は、失敗ではなく次のルールに進みます。
3. このサーフェスが対応できること。 ページが利用不可の場合、チャット内に描画し、このサーフェスで作成できないページについては何も言わないでください。利用可能な場合、両方の対象がオープンなので、1行だけ一度聞いてください:
これをブックマーク可能なページとして欲しいですか、それともチャット内だけで良いですか?
両方が本当に利用可能な場合のみ聞いてください。 答えが1つしかない質問は選択肢ではなく、負担です。
答えを保持しないでください。 これはこのセッション限りです。間違えるのに1文かかります。これは保存された設定を保持していない場合より安いコストです。
ページが利用可能かどうか判断できない場合は、チャット内に描画してください。基本設定は決して間違った答えではなく、公開ページが存在することに決して依存しません。
crm_view_tool({ "name": "crm:get_crm_home", "arguments": {} })
ビューはシェル(枠組み)を描画し、その後、利用可能なすべてのカードを並行して取得します。各カードは独自のタイムアウト(待機時間)を持ちます。カードツール自体を呼び出さないでください。 それらは get_crm_home_pipeline、get_crm_home_contacts、get_crm_home_deals、get_crm_home_counts、get_crm_home_notes、get_crm_home_meetings で、ここで呼び出すとビューが既に行っているすべてのフェッチが重複します。
このリストではなく、マニフェストからカード群を読み込んでください。サーバーは呼び出し元自身の測定されたツール使用に基づいてカードをランク付けするため、表示されるカードと表示順序は1ユーザーごとに異なります。
crm_view_tool がツールがビューを持たないと答えた場合、この組織ではMCP Appバンドルがオフです。ステップ1から既に保有しているマニフェストをまとめて説明し、対話的なホームはCRM UIが有効化されている必要があることを伝えてください。
| カード | 表示内容 | 不在の場合 |
|---|---|---|
| ステージ別パイプライン | ステージ別にグループ化されたオープンディール | ディール(取引)モジュールがオフの場合、マニフェストから除外される |
| 最近追加されたコンタクト | 過去30日間に追加されたコンタクト(連絡先) | なし |
| ディール | テナント(顧客組織)のディール | ディールモジュールがオフの場合、マニフェストから除外される |
| CRM全体の概要 | テナント全体のオブジェクト数 | なし |
| 最新ノート | 最新のノート | なし |
| 今週のミーティング | ユーザーの今後7日間 | インタラクション(相互作用)トラッキング(追跡)がオフの場合、表示されますが利用不可と理由が表示される |
| あなたが聞ける質問 | プラグインが対応するプロンプト | なし。静的であり、常に描画される |
2つのゲート(制御機構)は異なる動作をするため、カードは2つの異なる方法で不在になります。モジュールゲートはテナント(顧客組織)がそのモジュールを購入していない場合、タイル(カード)を見るべきではないため、マニフェストからカード全体を除外します。インタラクションゲートはカードを保持し、本当に空の週と区別がつかないため、理由を付けて利用不可とマークします。
マニフェストが利用不可とマークするカードは reason(理由)を含みます。ユーザーがカードがない理由を聞いた場合、理由を報告してください。それを有効化することは提案しないでください。これらはテナント権限であり、ユーザー設定ではありません。
ホームは2つの出口を持ちます。どちらに当てはまるか指差してください:
ユーザーがプロンプトを選択した場合、通常のスキルルーティングに任せてください。ホームのペイロード(データ)から答えようとしないでください。
テナント(顧客組織)データはラベル付けなしで決して描画しないでください。 マニフェストが組織の名前を指定し、ビューはすべてのカードにそれをスタンプします。realOrganization が存在する場合、ユーザーはCartaスタッフが別のテナントを見ており、ビューにバナーが表示されます。どちらの信号も削除したり、要約したりしないでください。
ホームは読み取り専用です。 決して書き込みはしません。ユーザーがここからレコードを変更するよう求めた場合、対応する追加または更新スキルに引き渡してください。
<!-- 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>
The Home is one manifest tool and two places to put it. The server decides which cards this organization may see, and the view fetches each card itself. Your job is to read the manifest, route a new user to the tutorial, pick where the Home goes, and render it.
Call it for data first, not for the view:
crm_call_tool({ "name": "crm:get_crm_home", "arguments": {} })
Read it for data before you render anything. Step 2 can send the user elsewhere, and a Home that renders and is then retracted is worse than one that never rendered.
The Home is behind a rollout flag. When it is off the server does not register
get_crm_home at all, and the call fails with an unknown-tool error. That is a normal
answer for an organization outside the rollout, not a failure.
What you do next depends on what the user asked for.
| The user asked for | Do this |
|---|---|
The Home itself, a dashboard, or /home |
Say the Home is not switched on for their organization, and offer what they can ask for instead |
| Something a card would have shown, such as "what's in my pipeline today" | Answer the question through the skill that owns it, here search-deals. Do not mention the Home |
The second row is the important one. A phrase like "what's in my pipeline today" is a real question that the plugin already answers, so leaving the user with "the Home is off" would take away an answer they used to get.
Never assemble a substitute Home. Do not call search_deals, search_tasks,
list_calendar_events and the rest to imitate the card set. Handing one question to the
skill that owns it is fine, because that skill runs its own access checks. Building a
Home-shaped panel yourself runs none of the card gating, so it can show an organization
something it is not entitled to see.
The manifest carries firstTimeUser. When it is true, the user is new to the CRM MCP
or has not used it for a while.
Invoke the tutorial skill instead of rendering the Home. Say one line first, so the
redirect does not read as a mistake:
Let me walk you through the plugin first. Your Home is waiting at the end.
The tutorial ends by rendering the Home, so nobody is denied it. Do not render the Home yourself as well.
When firstTimeUser is false or absent, continue to Step 3.
There are two, and they are not alternatives of equal standing:
carta-crm-home-build skill publishes it at a stable URL the
user can bookmark and reopen cold.The page is available only when both of these hold, so establish it before any rule below offers the page or invokes anything:
Artifact tool is present. Without it this surface cannot publish at all.carta-crm-home-build skill is installed. It is internal today, so a published
install does not carry it and no build verb can reach it.Treat the page as unavailable whenever you cannot confirm both. Never name a page this surface cannot produce, and never invoke a skill you have not seen.
Decide in this order, and stop at the first that answers.
1. What the user asked for. A build or publish verb, such as "publish my crm home", "pin
it", or "give me a link I can bookmark", names the page. When the page is available, invoke
carta-crm-home-build and do not render here as well. When it is not, say in one line that a
bookmarkable page is not available on this surface, then render in the conversation. A plain
"show my crm home" names neither target, so carry on. A build verb is not a reason to invoke
a skill that is absent.
2. What they already told you this session. If they have already chosen, honour it without asking again, as long as that target is still available. A recorded choice for a target this surface cannot serve falls through to the next rule rather than failing.
3. What this surface can do. If the page is unavailable, render in the conversation and say nothing about a page that cannot be built here. If it is available, both targets are open, so ask once, in one line:
Want this as a page you can bookmark, or just here in the chat?
Ask only when both are genuinely available. A question with one real answer is friction, not a choice.
Do not persist the answer. It holds for this session. Getting it wrong costs one sentence to redo, which is cheaper than a stored preference nobody remembers setting.
If you cannot tell whether the page is available, render in the conversation. The floor is never the wrong answer, and it never depends on the published page existing.
crm_view_tool({ "name": "crm:get_crm_home", "arguments": {} })
The view renders the shell and then fetches every available card itself, in parallel,
each with its own timeout. Do not call the card tools yourself. They are
get_crm_home_pipeline, get_crm_home_contacts, get_crm_home_deals,
get_crm_home_counts, get_crm_home_notes and get_crm_home_meetings, and calling
them here duplicates every fetch the view is already making.
Read the card set from the manifest rather than from this list. The server ranks the cards by the caller's own measured tool use, so both which cards appear and the order they appear in vary per user.
If crm_view_tool answers that the tool has no view, the MCP App bundle is off for this
organization. Fall back to summarising the manifest you already hold from Step 1, and say
the interactive Home needs the CRM UI enabled.
| Card | Shows | When it is missing |
|---|---|---|
| Pipeline by stage | Open deals grouped by stage | Absent from the manifest when the deals module is off |
| Contacts added recently | Contacts added in the last 30 days | Never |
| Deals | The tenant's deals | Absent from the manifest when the deals module is off |
| Your CRM at a glance | Object counts across the tenant | Never |
| Latest notes | The most recent notes | Never |
| Meetings this week | The user's next seven days | Present but unavailable, with a reason, when interaction tracking is off |
| What you can ask | Prompts the plugin supports | Never. It is static and always renders |
Two gates behave differently, so a card goes missing in two different ways. A module gate drops its card from the manifest entirely, because a tenant that does not buy the module should not see the tile. An interactions gate keeps the card and marks it unavailable with a reason, because an absent tile would be indistinguishable from a genuinely empty week.
A card the manifest marks unavailable carries a reason. Report the reason if the user
asks why a card is absent. Do not offer to enable it: these are tenant permissions, not
user settings.
The Home has two exits. Point at whichever fits:
If the user picks a prompt, let the normal skill routing handle it. Do not try to answer from the Home's payload.
Never render tenant data unlabelled. The manifest names the organization, and the
view stamps it on every card. When realOrganization is present the user is Carta staff
viewing another tenant, and the view shows a banner. Do not remove or summarise away
either signal.
The Home is read-only. It never writes. If the user asks to change a record from here, hand off to the matching add or update skill.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。