Carta CRM(顧客管理システム)から連絡先(人物)のレコードを検索して取得するスキルです。 **次のような場合に使用:** - 「連絡先を探して」 - 「〇〇さんについて詳しく教えて」 - 「〇〇さんの連絡先詳細を表示して」 - 「〇〇という企業の人物を探して」 - 「連絡先を一覧表示して」 - 「IDで連絡先を取得して」 などと言われた場合 ID番号、名前、メールアドレス、職位、所属企業、タグなど、連絡先の詳細情報を返します。 取得した連絡先IDは、「連絡先を更新」スキルで使用することができます。
Searches for and retrieves contact (people) records from the Carta CRM. Use this skill when the user says things like "find a contact", "search contacts", "look up a person", "show me contact details for [name]", "full details on [name]", "tell me about [name]", "get contact by ID", "list contacts", "find people at [company]", "search people", or "/search-contacts". Returns contact details including ID, name, email, title, company, and tags. The contact ID returned can be used with the update-contact skill.
Carta CRMの連絡先を検索できます。一人の人物についての検索であれば、その人物の詳細情報を表示します。複数人についての検索であれば、表にして表示します。まずこの違いを見分けることが重要です。以降の操作はすべてこの判別で決まります。
ユーザーが「検索」や「探して」と言っていても、一人の人物を指定していれば詳細表示です。判断が難しい場合は、リスト表示として扱い、何を絞り込みたいのかをユーザーに聞いてください。
必ずcrm_call_toolを使い、crm_view_toolは使わないでください。 このステップはユーザーのためではなく、あなたが情報を確認するためのものです。ビュー呼び出しを使うと、結果に含まれるすべての配列が数値に変換されてしまい、個別の行データと必要なIDが得られず、ユーザーが求めていないリスト表示をしてしまいます。
crm_call_tool({
"name": "crm:search_contacts",
"arguments": { query: "<人物の名前>", limit: 10 }
})
その後、マッチ結果の件数によって分岐します:
crm_view_tool({ "name": "crm:fetch_contact_by_id", "arguments": { id: "<id>" } })
crm_view_tool({
"name": "crm:search_contacts",
"arguments": { query: "<人物の名前>", limit: 10 }
})
その後、「複数の連絡先が見つかりました。どちらのことですか?」と聞いてください。ユーザーが選んだら、その人物に対してfetch_contact_by_idを呼び出してください。CRMでは同姓同名は珍しくないため、ユーザーが指定していない最初の1件を勝手に表示すると、間違った人物を確信をもって見せてしまいます。ユーザーがIDを直接指定した場合、名前の解決は不要です。1回の呼び出しで1人分の詳細を表示してください。
1回のリクエストにつき、詳細情報は最大1人分だけ表示します。ユーザーが複数人を指定した場合は、複数の詳細を積み重ねるのではなく、どの人物を表示するか聞いてください。
crm_view_tool({
"name": "crm:search_contacts",
"arguments": {
query: "<検索キーワード>",
limit: 20
}
})
ユーザーが特定のリストやフォルダを名前で指定している場合は、先にその名前をリストIDに変換してから、list_idを検索に渡して結果を絞ってください。この検索専用のビューはないため、crm_call_toolを使います:
crm_call_tool({ "name": "crm:get_contact_lists", "arguments": {} })
ユーザーがさらに多くの結果を見たいと言ったら、limitを増やしてください。ページネーション(複数ページ表示)にはoffsetを使います。
CRM機能は組織ごとに有効・無効が設定でき、1人分の詳細ビューはさらに追加の設定が必要です。そのためcrm_view_toolを呼び出すと以下の回答が返ることがあります:
CRM tool 'search_contacts' has no view — call it with crm_call_tool instead.
これは失敗ではなく正常な応答です。この組織ではそのビューが有効になっていません。その呼び出しを同じ内容でcrm_call_toolを使って再実行し、結果をテキストとして提示してください(ステップ4参照)。crm_view_toolの再実行はせず、ユーザーにこのメッセージは伝えないでください。
詳細表示のリクエストでカードのビューが利用できない場合も、解決方法は同じです:ステップ2のcrm_call_toolによる名前解決をそのまま進め、選ばれた記録をテキストで提示してください。
カード(詳細)が表示された場合、ユーザーは全項目を見ることができます。項目の内容を繰り返さず、ユーザーの質問に答えるか、1行で確認するだけにしてください。
テーブル(リスト)が表示された場合、ユーザーはすべての行を既に見ています。内容を再度列挙したり、形式を変えたり、要約をテキストで説明しないでください。テーブルとの重複になります。代わりに、ユーザーが実際に知りたいことに答えるか、1行で確認してください(例:「23件の連絡先が見つかりました。ID は最初の列に表示されており、/update-contact で使用できます」)。
crm_call_toolにフォールバック(切り替え)した場合、名前、肩書き、企業名、メールアドレス、電話番号、タグなど、空でないすべての項目を読みやすい形式で表示してください。ユーザーが/update-contactを実行する際に必要なため、IDは目立つように表示してください。
fetch_contact_by_idは関連する案件や備考も返します。ビューではそれらも表示されますが、ユーザーが特定の人物のコンテキスト情報を求めているなら、テキストでも呼び出してください。
連絡先が見つからない場合:
「検索に一致する連絡先が見つかりません。別の名前、メールアドレス、またはキーワードを試してください。」
<!-- carta:plugin-version --> <carta-plugin>carta-crm:1.15.0</carta-plugin>
Look up contacts in the Carta CRM. A request about one named person renders that person's card; a request for a set renders a table. Route on that distinction first — it decides every call below.
A named single person 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_contacts",
"arguments": { query: "<person's name>", limit: 10 }
})
Then branch on how many candidates came back:
crm_view_tool({ "name": "crm:fetch_contact_by_id", "arguments": { id: "<id>" } })
crm_view_tool({
"name": "crm:search_contacts",
"arguments": { query: "<person's name>", limit: 10 }
})
Then ask: "Several contacts match — which one did you mean?" When they pick, call
fetch_contact_by_id for it. Namesakes are common in a CRM, so opening the top hit
unasked shows the wrong person with full confidence.When the user gives an ID outright, there is nothing to resolve — one call, one card.
Render at most one card per request. If the user named several people, ask which to open rather than stacking views.
crm_view_tool({
"name": "crm:search_contacts",
"arguments": {
query: "<search term>",
limit: 20
}
})
If the user mentions a specific list or folder by name, resolve the name to a list ID
first, then pass list_id to narrow the search. This lookup has no view of its own, so
it goes through crm_call_tool:
crm_call_tool({ "name": "crm:get_contact_lists", "arguments": {} })
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_contacts' 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 23 contacts — the ID is in the first
column, for /update-contact.").
When you fell back to crm_call_tool, display all non-empty fields in a readable
summary — name, title, company, email, phone, and tags — and show the ID prominently,
since the user needs it to run /update-contact.
fetch_contact_by_id also returns related deals and notes. The view renders those, but
call them out in text if the user is asking for context on a specific person.
If no contacts are found:
"No contacts found matching your search. Try a different name, email, or keyword."
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。