Carta CRM(顧客管理ツール)から企業レコードを検索して取得するスキルです。 **次のような場合に使用:** ユーザーが「企業を検索して」「会社の詳細を教えて」「〇〇についての情報を」「IDから企業を探して」「ドメインで会社を検索」「登録している企業一覧を見せて」「/search-companies」といったような指示をした場合 取得される情報には、企業ID、企業名、カスタム項目などの詳細が含まれます。取得した企業IDは、企業情報を更新するスキルと組み合わせて使用できます。
Searches for and retrieves company records from the Carta CRM. Use this skill when the user says things like "find a company", "search companies", "look up a company", "show me company details for [name]", "full details on [name]", "tell me about [name]", "get company by ID", "get company by domain", "list companies", "what companies do we have", or "/search-companies". Returns company details including ID, name, and custom fields. The company ID returned can be used with the update-company skill.
<!-- carta:instrumentation-fallback -->
<重要>
_instrumentation_v2 は、Cartaスキルの使用状況を集計する匿名の利用データです。Carta MCPツール呼び出しの引数に必ず含めるようにしてください。プラグインのフックが実行時に上書きするため、常に送信しても安全です。形式は以下の通りです:
_instrumentation_v2: {"skills": ["<プラグイン>:<スキル>", ...], "model": "<モデルID>", "surface": "<値>"}
skills はセッション内で累積します。これまでに読み込まれたCartaスキル全て(このスキルのみではなく)を記載してください。各エントリを "プラグイン:スキル" の形式で名前空間化し、古い順で記載し、最後に最も最近使用したスキルを置きます。Cartaスキルのみを記載してください(carta-cap-table:*、carta-crm:*、carta-investors:*)。非Cartaプラグインのスキルは含めないでください。
surface は、Claudeを実行中のインターフェース です:"chat"(claude.aiまたはClaudeアプリ、通常のチャット・Cowork以外)、"cowork"(Coworkモード)、"code-terminal"、"code-desktop"、"excel"。これらのいずれにも該当しない、または判断できない場合は、このフィールドを完全に省略してください。推測や別の値を作成しないでください。
</重要>
Carta CRM(顧客管理システム)で企業情報を検索します。特定の1社に関する質問であれば、その企業の詳細ページを表示します。複数の企業や検索結果であれば、表として表示します。まずこの区別を判定することが最初のステップです。
詳細表示 — ユーザーが1社の名前を挙げて詳しい情報を求めている場合です。「Preqinの詳しい情報」「Acmeについて教えて」「Stripeについてもっと知りたい」「Preqinはどの企業?」 → ステップ2へ
一覧表示 — ユーザーが複数の企業、フィルタリングされた結果、または複数形での結果を求めている場合です。「追跡中の企業」「フィンテック企業」「管理している企業は何か」 → ステップ3へ
ドメイン指定 — ユーザーがウェブサイトのドメインを指定した場合です(例:stripe.com) → ステップ2へ(名前解決をスキップ)。fetch_company_by_domain が自動的に該当する企業を特定します。
ユーザーが「検索」や「探して」と言った場合でも、1社の名前が明確に挙げられていれば詳細表示の要求です。判断が難しい場合は、一覧表示として扱い、何を絞り込みたいのか確認しましょう。
crm_call_tool を使用して名前を解決します。crm_view_tool は使用しないでください。 このステップはあなた用です。ビュー呼び出しは、応答内のすべての配列をカウントに圧縮してしまうため、個別のレコード(必要な id)があなたに届かず、ユーザーには求めていない一覧が表示されてしまいます。
crm_call_tool({
"name": "crm:search_companies",
"arguments": { query: "<企業名>", limit: 10 }
})
返された候補の数に応じて、次のように分岐します:
完全一致が1件 → 詳細ページを表示して終了します:
crm_view_tool({ "name": "crm:fetch_company_by_id", "arguments": { id: "<id>" } })
複数件一致 → 推測してはいけません。候補をビューで表示して、どれを選ぶのか確認しましょう:
crm_view_tool({
"name": "crm:search_companies",
"arguments": { query: "<企業名>", limit: 10 }
})
その後、「複数の企業が一致しました。どちらの企業でしょうか?」と質問します。ユーザーが選択したら、その企業に対して fetch_company_by_id を呼び出します。勝手に最初の結果の詳細ページを開くと、違う企業を確信を持って表示してしまいます。
一致なし → そのことを伝えます。空のビューは表示しないでください。
ドメイン指定の場合、名前解決は不要です。1回の呼び出しで1つの詳細ページが表示されます:
crm_view_tool({ "name": "crm:fetch_company_by_domain", "arguments": { domain: "<ドメイン>" } })
1回のリクエストで表示するビューは1つまでにしてください。複数の企業をユーザーが挙げた場合は、複数のビューを積み重ねるのではなく、どちらを開くか確認しましょう。
ユーザーのフィルタが特定のフィールドに対応する場合は、事前に有効な field_id を調べましょう。これはスキーマ(データ構造)の検索なので、crm_call_tool を使用します:
crm_call_tool({ "name": "crm:get_company_fields", "arguments": {} })
ユーザーの意図を最も具体的に一致するフィールドにマッピングし、filters({ field_id, operator, value })として渡します。フィールドが一致しない場合のみ、自由形式の query(テキスト検索)にフォールバックしてください。field_id を推測してはいけません。組織によって異なります。
crm_view_tool({
"name": "crm:search_companies",
"arguments": {
query: "<検索語>",
limit: 20
}
})
ユーザーがさらに多くの結果を見たいと言った場合は、limit を増やしてください。ページネーション(複数ページ分けて表示)には offset を使用します。
CRMビューは組織ごとに有効化され、単一レコードのビューはさらに別のフラグで制御されています。上記の crm_view_tool 呼び出しは、次のような応答を返す可能性があります:
CRM tool 'search_companies' has no view — call it with crm_call_tool instead.
これは失敗ではなく、この組織がそのビューを有効化していないという通常の応答です。その呼び出しを crm_call_tool で同じ内容で再実行し、結果をテキストとしてステップ4に従って表示してください。crm_view_tool を再度実行しないでください。ユーザーにこのメッセージを報告する必要もありません。
詳細表示のリクエストで詳細ページのビューがない場合も、同じ方法で対応します。ステップ2の crm_call_tool による名前解決を実行し、選択した企業をテキストとして表示してください。
詳細ページが表示された場合、ユーザーは全レコードを目にしています。フィールドを改めて述べないでください。ユーザーが何を求めていたかに答えるか、1行で承認するだけです。
表が表示された場合、ユーザーはすべての行を既に見ています。テキストで改めて一覧表示、再フォーマット、要約しないでください。表の内容が重複してしまいます。ユーザーが実際に求めていた質問に答えるか、1行で承認してください(例:「14社の企業が見つかりました。IDは最初の列にあり、/update-company で使用できます」)。
crm_call_tool にフォールバックした場合は、空でないすべてのフィールドを読みやすい要約として表示し、IDを目立つように表示してください。ユーザーは /update-company を実行するために必要になります。
企業が見つからない場合:
「お探しの企業は見つかりませんでした。別の企業名、キーワード、またはドメインを試してください。」
<!-- 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>
Look up companies in the Carta CRM. A request about one named company renders that company's card; a request for a set renders a table. Route on that distinction first — it decides every call below.
fetch_company_by_domain already identifies one record.A named single company is a detail request even when the user says "search" or "find". If it's genuinely unclear, treat it as a list and ask what they want to narrow to.
Resolve through crm_call_tool, never crm_view_tool. This step is for you, not the
user: a view call collapses every array in the response to a count, so the rows — and the
id you need — never reach you, and the user gets a list they did not ask for.
crm_call_tool({
"name": "crm:search_companies",
"arguments": { query: "<company name>", limit: 10 }
})
Then branch on how many candidates came back:
crm_view_tool({ "name": "crm:fetch_company_by_id", "arguments": { id: "<id>" } })
crm_view_tool({
"name": "crm:search_companies",
"arguments": { query: "<company name>", limit: 10 }
})
Then ask: "Several companies match — which one did you mean?" When they pick, call
fetch_company_by_id for it. Opening the top hit unasked shows the wrong record with
full confidence.By domain, there is nothing to resolve — one call, one card:
crm_view_tool({ "name": "crm:fetch_company_by_domain", "arguments": { domain: "<domain>" } })
Render at most one card per request. If the user named several companies, ask which to open rather than stacking views.
When the user's filters map to specific fields, discover the valid field_ids first. This
is a schema lookup, so it goes through crm_call_tool:
crm_call_tool({ "name": "crm:get_company_fields", "arguments": {} })
Map the user's intent to the most specific matching fields and pass them as filters
({ field_id, operator, value }). Fall back to the free-text query only when no field
matches. Never guess a field_id — they vary per organisation.
crm_view_tool({
"name": "crm:search_companies",
"arguments": {
query: "<search term>",
limit: 20
}
})
Increase limit if the user asks to see more results. Use offset to paginate.
CRM views are enabled per organisation, and single-record views behind a second flag on
top of that. So any crm_view_tool call above may answer with:
CRM tool 'search_companies' has no view — call it with crm_call_tool instead.
That is a normal response, not a failure — this organisation does not have that view
enabled. Retry that one call verbatim through crm_call_tool and present the result as
text per Step 4. Do not retry crm_view_tool, and do not report the message to the
user.
A detail request whose card has no view still resolves the same way: keep the
crm_call_tool resolve from Step 2 and present the chosen record as text.
When a card rendered, the user sees the whole record. Do not restate its fields. Answer what they asked, or acknowledge in one line.
When a table rendered, the user already sees every row. Do NOT re-list, re-format, or
summarise them as text — that duplicates the table. Answer the question they actually
asked, or acknowledge in one line (e.g. "Found 14 companies — the ID is in the first
column, for /update-company.").
When you fell back to crm_call_tool, display all non-empty fields in a readable
summary and show the ID prominently — the user will need it to run /update-company.
If no companies are found:
"No companies found matching your search. Try a different name, keyword, or domain."
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。