• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLKnowledge Workproductivity

search-contacts

プラグイン
carta-crm
ソース
GitHub で見る ↗
説明

Carta CRM(顧客関係管理システム)から連絡先(人物)の記録を検索して取得します。 **次のような場合に使用:** - 「連絡先を探して」 - 「連絡先を検索」 - 「この人の情報を調べて」 - 「[名前]の連絡先詳細を表示」 - 「[名前]の詳しい情報」 - 「[名前]について教えて」 - IDで連絡先を取得 - 連絡先一覧を表示 - 「[企業名]にいる人を探して」 - 人物を検索 - /search-contacts 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: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 — 意図の判定:1 人か、複数人か?

  • 詳細表示 — ユーザーが 1 人の具体的な名前を挙げて、その記録を見たい場合:「田中花子の詳しい情報」「太郎について教えて」「この連絡先についてもっと知りたい」「田中花子って誰?」→ ステップ 2 へ
  • 一覧表示 — ユーザーが複数人の集合、絞り込み検索、または複数形の結果を求めている場合:「Acme 社の人たち」「営業パイプラインの連絡先」「連絡先を一覧表示」→ ステップ 3 へ
  • ID で検索 — ユーザーが連絡先 ID を直接指定した場合 → ステップ 2(名前解決をスキップ)へ

ユーザーが「検索」や「探す」という言葉を使った場合でも、1 人の具体的な人物が対象なら詳細表示リクエストです。本当に不明確な場合は、一覧表示として扱い、絞り込み方法をユーザーに尋ねてください。

ステップ 2 — 詳細表示:名前を解決してからカードを表示

必ず crm_call_tool を使用してください。crm_view_tool は使いません。 このステップはあなたが行う処理で、ユーザー向けではありません。view 呼び出しはレスポンスのすべての配列を件数に圧縮するため、実データ行(および必要な id)があなたに届かず、ユーザーは求めていなかった一覧を見ることになるからです。

crm_call_tool({
  "name": "crm:search_contacts",
  "arguments": { query: "<人物の名前>", limit: 10 }
})

返ってきた候補の数で分岐します:

  • 完全に一致する結果が 1 つ → そのカードを表示して終了:
    crm_view_tool({ "name": "crm:fetch_contact_by_id", "arguments": { id: "<id>" } })
    
  • 複数の一致 → 推測してはいけません。候補を view で表示し、どれを見たいのかをユーザーに尋ねてください:
    crm_view_tool({
      "name": "crm:search_contacts",
      "arguments": { query: "<人物の名前>", limit: 10 }
    })
    
    その後:「複数の連絡先が見つかりました。どれのことですか?」とユーザーに問いかけてください。ユーザーが選んだら、その ID に対して fetch_contact_by_id を呼び出してください。CRM システムでは同姓同名は珍しくないため、確認なしに最初の候補を開くと、確実に間違った人の情報を表示してしまいます。
  • 一致なし → その旨を伝えてください。空の view を表示してはいけません。

ユーザーが直接 ID を指定した場合、解決の手順は不要です。1 回の呼び出しで 1 枚のカードを表示するだけです。

1 つのリクエストで最大 1 枚のカードを表示してください。ユーザーが複数の人物を挙げた場合は、複数のビューを重ねて表示するのではなく、どの人を開くかをユーザーに尋ねてください。

ステップ 3 — 一覧表示:検索して表を表示

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 のビューはチーム(組織)ごとに有効/無効が設定され、単一レコードの表示については、その上にさらにフラグが設定されています。そのため、上記の crm_view_tool 呼び出しは以下のように答える可能性があります:

CRM tool 'search_contacts' has no view — call it with crm_call_tool instead.

(「CRM ツール 'search_contacts' にはビューがありません。代わりに crm_call_tool で呼び出してください」)

これは失敗ではなく、正常なレスポンスです。このチームは該当するビューを有効にしていません。その呼び出しを 1 回だけ crm_call_tool で同じ内容で再度実行し、結果をステップ 4 のテキスト形式で表示してください。crm_view_tool を再試行してはいけません。このメッセージをユーザーに報告してもしないでください。

詳細表示リクエストでカードにビューがない場合も、解決方法は同じです。ステップ 2 の crm_call_tool 解決を継続し、選ばれたレコードをテキスト形式で表示してください。

ステップ 4 — 結果を提示

カードが表示されたとき、ユーザーはすべてのレコード情報を見ています。そのフィールドを繰り返す必要はありません。ユーザーが尋ねたことに答えるか、1 行で確認してください。

表が表示されたとき、ユーザーはすべての行をすでに見ています。テキストで改めてリストアップしたり、フォーマットを変えたり、内容を要約したりしてはいけません。それは表と重複します。ユーザーが実際に質問していることに答えるか、1 行で確認してください(例:「23 件の連絡先が見つかりました。ID は最初の列にあり、/update-contact で使用できます」)。

crm_call_tool にフォールバックしたとき、空でないすべてのフィールド(名前、役職、会社名、メール、電話、タグなど)を読みやすい形式で表示し、ID は目立つように表示してください。ユーザーが /update-contact を実行するために必要だからです。

fetch_contact_by_id は関連する商談(ディール)とメモも返します。ビューはそれらを表示しますが、ユーザーが特定の人物についての背景情報を求めている場合は、テキストで呼び出してください。

連絡先が見つからない場合:

「検索に一致する連絡先が見つかりません。別の名前、メール、またはキーワードを試してください。」

原文(English)を表示

<!-- 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>

Overview

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.

Step 1 — Determine intent: one person, or a set?

  • Detail — the user named one person and wants the record: "full details on Jane Doe", "tell me about Ihar", "more on this contact", "who is Jane Doe". → Step 2.
  • List — the user wants a set, or filtered or plural results: "people at Acme", "contacts in my pipeline", "list contacts". → Step 3.
  • By ID — the user gave a contact ID → Step 2, skipping the resolve.

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.

Step 2 — Detail: resolve the name, then render the card

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:

  • Exactly one match → render its card and stop:
    crm_view_tool({ "name": "crm:fetch_contact_by_id", "arguments": { id: "<id>" } })
    
  • Several matches → do NOT guess. Render the candidates as a view and ask which one:
    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.
  • No match → say so; do not render an empty view.

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.

Step 3 — List: search and render the table

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.

If the view is unavailable

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.

Step 4 — Present results

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 による自動翻訳です。