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 -->
<IMPORTANT>
_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" のいずれかです。どれにも該当しない場合、または判断できない場合は、この項目を完全に省略してください。推測や新しい値の創作は行わないでください。
</IMPORTANT>
Carta CRMで企業を検索します。特定の1社の名前が挙げられた場合はその企業カードを表示し、複数社のセットが対象の場合は表をリストアップします。まずこの区別を判断してください。以下の手順はそれで決まります。
fetch_company_by_domain は既に1社を特定しています。ユーザーが「検索して」「探して」と言っていても、特定の1社の名前が挙がれば、それは詳細表示リクエストです。本当に判断できない場合は、リスト表示として扱い、ユーザーに絞り込み条件を確認してください。
crm_view_tool ではなく crm_call_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ビューは組織ごとに有効化されており、1社のレコード表示は別のフラグで二重に制御されています。したがって上記の 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 による自動翻訳です。