> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.jarvi.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP (AI Assistants)

> Connect AI assistants like Claude Desktop or Cursor to your Jarvi data

## What is MCP?

The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard that allows AI assistants to connect to external tools and data sources. Jarvi exposes an MCP server so you can use AI assistants to search, read, and update your Jarvi data directly.

## Compatible clients

Any MCP-compatible client can connect to Jarvi, including:

* [Claude Desktop](https://claude.ai/download)
* [Cursor](https://cursor.com)
* [Windsurf](https://codeium.com/windsurf)
* Any client supporting the **Streamable HTTP** transport

## Configuration

### Claude Desktop

Go to **Settings > Connectors > Add a custom connector**, enter a name (e.g., "Jarvi") and the URL:

```
https://mcp.jarvi.tech
```

Claude Desktop handles authentication automatically via OAuth2 — you'll be redirected to log in with your Jarvi account.

### Other clients

For clients that don't support OAuth2, use a private API key:

* **Transport**: Streamable HTTP
* **URL**: `https://mcp.jarvi.tech`
* **Authentication**: `x-api-key` header with your [private API key](./api-keys)

<Warning>
  Your private key grants full access to your Jarvi data. Never share it publicly.
</Warning>

## Available tools

Once connected, the following tools are available for your AI assistant:

| Tool                      | Description                                                                      |
| ------------------------- | -------------------------------------------------------------------------------- |
| `whoAmI`                  | Returns the identity of the logged-in user (name, email, workspace)              |
| `getStatuses`             | List available statuses for profiles, companies, or projects                     |
| `getCustomFields`         | List custom fields defined for an entity type                                    |
| `getHistorySubtypes`      | List custom interaction subtypes (e.g., call categories)                         |
| `advancedSearch`          | Search profiles, companies, or projects using natural language                   |
| `getEntityData`           | Retrieve detailed data for profiles, companies, or projects by IDs               |
| `getAgenda`               | Retrieve upcoming events from connected calendars                                |
| `getNotifications`        | Retrieve the user's recent notifications                                         |
| `createProfile`           | Create a new profile (talent and/or contact)                                     |
| `createCompany`           | Create a new company                                                             |
| `createProject`           | Create a new project / recruitment assignment                                    |
| `associateProfiles`       | Link a profile to a project (talent or contact) or to a company                  |
| `createHistoryEntry`      | Add a note or call log to a profile's history                                    |
| `createTodo`              | Create a reminder/to-do linked to a profile, company, or project                 |
| `sendMessage`             | Send messages to one or more profiles (email, LinkedIn, WhatsApp, Telegram, SMS) |
| `getMessageTemplates`     | List available message templates (personal and shared by colleagues)             |
| `uploadFile`              | Upload a file and attach it to an entity (profile, company, or project)          |
| `cancelScheduledMessages` | Cancel one or more scheduled messages                                            |
| `updateProfile`           | Update a profile, add emails or phone numbers                                    |
| `updateCompany`           | Update a company, change status by name, add emails                              |
| `updateProject`           | Update a project, change status by name, link a company                          |
| `fillJobOffer`            | Generate or refine a job offer from project data                                 |
| `getOutboxDiagnostic`     | Diagnose the outbox: list pending scheduled messages with status and errors      |
| `retryOutboxTasks`        | Retry errored tasks by resetting their status                                    |
| `queryGraphQL`            | Execute GraphQL queries/mutations on authorized tables (your permissions apply)  |

<Info>
  All operations run with **your permissions**. Row-level security applies — you can only access data your account has access to.
</Info>

## Prompt Examples

Once connected, try asking your AI assistant:

* *"Who am I?"*
* *"Search for React developers in Paris"*
* *"Show me the details of project X"*
* *"Create a profile for John Doe, developer"*
* *"Position this candidate on project X"*
* *"Set the status of Acme company to Qualified"*
* *"What custom fields exist on profiles?"*
* *"Log a call with John Doe: discussed his availability"*
* *"Remind me to follow up with Acme next Monday"*
* *"Update John Doe's title to Senior Developer"*

## Limitations

* The same [usage limits](./introduction#terms-of-use) apply: 5 minutes of cumulative time per hour and 30 minutes per 12 hours. If you need more, contact our support team.
* Deletion operations are blocked — use soft delete (updating `deletedAt`) instead.
* Responses that are too large are automatically truncated. Use `limit` arguments in your queries.
* Destructive tools (mutations, campaign launches, message follow-ups) require confirmation from the AI assistant before execution.
