• 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-companies

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

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.

ユースケース
  • 企業名やドメインで企業を検索するとき
  • 企業IDから詳細情報を取得するとき
  • 登録している企業一覧を確認するとき
  • 企業情報を更新する前に企業IDを探すとき
本文(日本語訳)

<!-- 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社の名前を挙げて詳しい情報を求めている場合です。「Preqinの詳しい情報」「Acmeについて教えて」「Stripeについてもっと知りたい」「Preqinはどの企業?」 → ステップ2へ

  • 一覧表示 — ユーザーが複数の企業、フィルタリングされた結果、または複数形での結果を求めている場合です。「追跡中の企業」「フィンテック企業」「管理している企業は何か」 → ステップ3へ

  • ドメイン指定 — ユーザーがウェブサイトのドメインを指定した場合です(例:stripe.com) → ステップ2へ(名前解決をスキップ)。fetch_company_by_domain が自動的に該当する企業を特定します。

ユーザーが「検索」や「探して」と言った場合でも、1社の名前が明確に挙げられていれば詳細表示の要求です。判断が難しい場合は、一覧表示として扱い、何を絞り込みたいのか確認しましょう。

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

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つまでにしてください。複数の企業をユーザーが挙げた場合は、複数のビューを積み重ねるのではなく、どちらを開くか確認しましょう。

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

ユーザーのフィルタが特定のフィールドに対応する場合は、事前に有効な 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 による名前解決を実行し、選択した企業をテキストとして表示してください。

ステップ4 — 結果の表示

詳細ページが表示された場合、ユーザーは全レコードを目にしています。フィールドを改めて述べないでください。ユーザーが何を求めていたかに答えるか、1行で承認するだけです。

表が表示された場合、ユーザーはすべての行を既に見ています。テキストで改めて一覧表示、再フォーマット、要約しないでください。表の内容が重複してしまいます。ユーザーが実際に求めていた質問に答えるか、1行で承認してください(例:「14社の企業が見つかりました。IDは最初の列にあり、/update-company で使用できます」)。

crm_call_tool にフォールバックした場合は、空でないすべてのフィールドを読みやすい要約として表示し、IDを目立つように表示してください。ユーザーは /update-company を実行するために必要になります。

企業が見つからない場合:

「お探しの企業は見つかりませんでした。別の企業名、キーワード、またはドメインを試してください。」

原文(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 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.

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

  • Detail — the user named one company and wants the record: "full details on Preqin", "tell me about Acme", "more on Stripe", "who is Preqin". → Step 2.
  • List — the user wants a set, or filtered or plural results: "companies I'm tracking", "companies in fintech", "what companies do we have". → Step 3.
  • By domain — the user gave a website domain (e.g. "stripe.com") → Step 2, skipping the resolve; 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.

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_companies",
  "arguments": { query: "<company 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_company_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_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.
  • No match → say so; do not render an empty view.

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.

Step 3 — List: search and render the table

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.

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_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.

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