Skip to content
Back to skills

Source 2d9c8376355592a3e0e6f3c2

ASecurity

Searches for and retrieves investor records from the Carta CRM. Use this skill when the user says things like "find an investor", "search investors", "look up an investor", "show me investor details for [name]", "full details on [name]", "tell me about [name]", "get investor by ID", "list investors", "what investors do we have", or "/search-investors". Returns investor details including ID, name, and custom fields. The investor ID returned can be used with the update-investor skill.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agents

Works with

  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add gutsofpratik/OpenClaude-Skills --skill source-2d9c8376355592a3e0e6f3c2 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Source 2d9c8376355592a3e0e6f3c2?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Source 2d9c8376355592a3e0e6f3c2
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gutsofpratik-source-2d9c8376355592a3e0e6f3c2/badge)](https://www.skillsdirectory.com/skills/gutsofpratik-source-2d9c8376355592a3e0e6f3c2)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: search-investors
description: >
  Searches for and retrieves investor records from the Carta CRM.
  Use this skill when the user says things like "find an investor", "search investors",
  "look up an investor", "show me investor details for [name]", "full details on [name]", "tell me about [name]", "get investor by ID",
  "list investors", "what investors do we have", or "/search-investors".
  Returns investor details including ID, name, and custom fields.
  The investor ID returned can be used with the update-investor skill.
allowed-tools:
  - mcp__carta__crm_view_tool
  - mcp__carta__crm_call_tool
  - mcp__claude_ai_Carta__crm_view_tool
  - mcp__claude_ai_Carta__crm_call_tool
  - mcp__2827383e-1775-4df3-b6ff-04d5392f6d18__crm_view_tool
  - mcp__2827383e-1775-4df3-b6ff-04d5392f6d18__crm_call_tool
version: 1.0.0
model: haiku
---

<!-- carta:plugin-version -->
<carta-plugin>carta-crm:1.15.0</carta-plugin>

## Overview

Look up investors in the Carta CRM. A request about **one named investor** renders that
investor'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 investor, or a set?

- **Detail** — the user named one investor and wants the record: "full details on Preqin",
  "tell me about Index Ventures", "more on this investor", "who is Preqin". → Step 2.
- **List** — the user wants a set, or filtered or plural results: "investors in my
  pipeline", "seed-stage investors", "what investors do we have". → Step 3.
- **By ID** — the user gave an investor ID → Step 2, skipping the resolve.

A named single investor 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_investors",
  "arguments": { query: "<investor name>", limit: 10 }
})
```

Then branch on how many candidates came back:

- **Exactly one match** → render its card and stop:
  ```
  crm_view_tool({ "name": "crm:get_investor", "arguments": { id: "<id>" } })
  ```
- **Several matches** → do NOT guess. Render the candidates as a view and ask which one:
  ```
  crm_view_tool({
    "name": "crm:search_investors",
    "arguments": { query: "<investor name>", limit: 10 }
  })
  ```
  Then ask: "Several investors match — which one did you mean?" When they pick, call
  `get_investor` for it. Firms often share a stem ("Index", "Index Ventures"), so opening
  the top hit unasked shows the wrong record 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 investors, ask which to open
rather than stacking views.

## Step 3 — List: search and render the table

```
crm_view_tool({
  "name": "crm:search_investors",
  "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_investors' 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 9 investors — the ID is in the first
column, for `/update-investor`.").

**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-investor`.

If no investors are found:
> "No investors found matching your search. Try a different name or keyword."

Files in this skill

  • PROVENANCE.json204 B
  • SKILL.md4.8 KB
  • UPSTREAM-LICENSE.txt11 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.