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

# Tools

> Reference for every tool exposed by Unify MCP.

Unify MCP exposes 71 tools. Six manage the Agent lifecycle, four load identity
or Unify data for context, and 61 provide direct access to Unify's public APIs.

Every tool call is scoped to the Unify user and tenant that authenticated the
connection. A tool can only read or act on data that user can already see in
Unify.

## Agent tools

Use `run_agent` to start work, then use the other Agent tools to monitor,
continue, cancel, and read runs.

### run\_agent

Starts Unify's general-purpose Agent on a natural-language task. This is the
same Agent behind [Unify Chat](https://app.unifygtm.com), so `run_agent`
supports anything Unify Chat does: research, building a list of companies or
people, enrolling records in a Sequence, running a Play, writing updates back
to your CRM, and similar work. Returns a run ID immediately; the Agent
continues running in the background.

<ParamField body="prompt" type="string" required>
  The natural-language task for the Agent to perform.
</ParamField>

| Output field | Type            | Description                                                                                    |
| :----------- | :-------------- | :--------------------------------------------------------------------------------------------- |
| `runId`      | `string` (UUID) | ID of the started run. Pass this to `poll_agent`, `answer_question`, and `read_agent_results`. |

<Warning>
  Starting a run requires the workspace to have chat funding/credits
  available, and is subject to per-user rate limiting. Both conditions
  surface as a tool error rather than a silent failure.
</Warning>

```json Example call theme={null}
{
  "prompt": "Research acme.com and tell me if they're a good fit for our ICP: B2B SaaS, 50-500 employees, uses Salesforce."
}
```

```json Example response theme={null}
{
  "runId": "b0fdcba7-a8e5-4fa3-abb0-26ee20f5ba47"
}
```

### poll\_agent

Checks the status of a run started by `run_agent`. Keep calling this while
the run is `PENDING`.

<ParamField body="runId" type="string" required>
  The `runId` returned by `run_agent`.
</ParamField>

| Output field | Type            | Description                                                                                                            |
| :----------- | :-------------- | :--------------------------------------------------------------------------------------------------------------------- |
| `runId`      | `string` (UUID) | The run being polled.                                                                                                  |
| `status`     | `string`        | One of `PENDING`, `CLARIFICATION_NEEDED`, `READY`, `ERROR`, or `NOT_FOUND`.                                            |
| `questions`  | `array \| null` | Present when `status` is `CLARIFICATION_NEEDED`: the questions the Agent needs answered to continue. `null` otherwise. |

**Status values:**

| Status                 | Meaning                                                                                              |
| :--------------------- | :--------------------------------------------------------------------------------------------------- |
| `PENDING`              | Still running. Keep polling.                                                                         |
| `CLARIFICATION_NEEDED` | The Agent needs input before it can continue. Answer every returned question with `answer_question`. |
| `READY`                | The run finished successfully. Call `read_agent_results`.                                            |
| `ERROR`                | The run failed or was canceled. Call `read_agent_results` for the error message.                     |
| `NOT_FOUND`            | No run exists with that `runId` for this user.                                                       |

```json Example response (still running) theme={null}
{
  "runId": "b0fdcba7-a8e5-4fa3-abb0-26ee20f5ba47",
  "status": "PENDING",
  "questions": null
}
```

### answer\_question

Answers every question from a `CLARIFICATION_NEEDED` run and resumes it.
Pass the questions back exactly as `poll_agent` returned them. The tool
validates that the submitted answers line up with the pending questions
before resuming the run.

<ParamField body="runId" type="string" required>
  The `runId` of the run awaiting clarification.
</ParamField>

<ParamField body="answers" type="array" required>
  One answer for every question `poll_agent` returned, in the same order.

  <Expandable title="answers[]">
    <ParamField body="question" type="string" required>
      The exact question text as returned by `poll_agent`.
    </ParamField>

    <ParamField body="answer" type="string" required>
      The answer to that question.
    </ParamField>
  </Expandable>
</ParamField>

| Output field      | Type            | Description                                                                                                   |
| :---------------- | :-------------- | :------------------------------------------------------------------------------------------------------------ |
| `runId`           | `string` (UUID) | The run that was resumed.                                                                                     |
| `alreadyResuming` | `boolean`       | `true` if another request had already started resuming this run. Informational only; keep polling either way. |

```json Example call theme={null}
{
  "runId": "b0fdcba7-a8e5-4fa3-abb0-26ee20f5ba47",
  "answers": [
    { "question": "Which region should I focus the search on?", "answer": "North America" }
  ]
}
```

### read\_agent\_results

Reads the final answer or error from a terminal run (`READY` or `ERROR`).
Call `poll_agent` first. This tool errors if the run hasn't reached a
terminal status yet.

<ParamField body="runId" type="string" required>
  The `runId` of the run to read.
</ParamField>

| Output field   | Type             | Description                                                                                      |
| :------------- | :--------------- | :----------------------------------------------------------------------------------------------- |
| `status`       | `string`         | `READY` or `ERROR`.                                                                              |
| `finalAnswer`  | `string \| null` | The Agent's final answer text, when `status` is `READY`.                                         |
| `content`      | `array`          | Structured content items produced by the run (for example, tables or lists the Agent generated). |
| `errorMessage` | `string \| null` | The failure reason, when `status` is `ERROR`.                                                    |

```json Example response theme={null}
{
  "status": "READY",
  "finalAnswer": "Acme Corp looks like a strong fit: 220 employees, B2B SaaS, and their careers page lists a Salesforce Administrator role.",
  "content": [],
  "errorMessage": null
}
```

### cancel\_agent

Stops an in-flight run started by `run_agent`. It is safe to call after a run
has already finished.

<ParamField body="runId" type="string" required>
  The `runId` returned by `run_agent`.
</ParamField>

| Output field | Type            | Description                              |
| :----------- | :-------------- | :--------------------------------------- |
| `runId`      | `string` (UUID) | The run targeted for cancellation.       |
| `outcome`    | `string`        | Either `CANCELED` or `ALREADY_TERMINAL`. |

### list\_agent\_runs

Lists Agent runs started through `run_agent` for the current user, newest
first.

<ParamField body="status" type="string">
  Exact run status to return. Omit to return all statuses.
</ParamField>

<ParamField body="limit" type="number" default={50}>
  Maximum runs to return per page. Cannot exceed 100.
</ParamField>

<ParamField body="cursor" type="string">
  The opaque `nextCursor` returned by the previous page.
</ParamField>

| Output field | Type             | Description                                                                 |
| :----------- | :--------------- | :-------------------------------------------------------------------------- |
| `runs`       | `array`          | Runs with their IDs, Unify links, titles, statuses, and start times.        |
| `nextCursor` | `string \| null` | Pass as `cursor` to load the next page; `null` when there are no more runs. |

## Context and identity tools

### get\_me

Returns the authenticated Unify user's profile and workspace identity. This
tool does not require any input.

| Output field | Type     | Description                                                                             |
| :----------- | :------- | :-------------------------------------------------------------------------------------- |
| `user`       | `object` | The current user's profile, including their ID, name, email, role, and contact details. |
| `workspace`  | `object` | The current workspace's ID, name, and domain.                                           |

### load\_datatable

Loads a Unify DataTable the calling user owns, including its metadata,
columns, and a cursor-paginated page of rows.

<ParamField body="tableId" type="string" required>
  The ID of the DataTable to load.
</ParamField>

<ParamField body="limit" type="number" default={100}>
  Maximum rows to return per page.
</ParamField>

<ParamField body="cursor" type="string">
  The opaque `nextCursor` returned by a previous call, used to load the next
  page.
</ParamField>

| Output field | Type             | Description                                                                                                                                                                               |
| :----------- | :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `metadata`   | `object`         | Table metadata, including `hasActiveJob` and `activeJobKinds`. If `hasActiveJob` is `true`, the table is still being populated and calling the tool again later will return updated rows. |
| `columns`    | `array`          | The table's column definitions.                                                                                                                                                           |
| `rows`       | `array`          | The current page of rows.                                                                                                                                                                 |
| `nextCursor` | `string \| null` | Pass as `cursor` to load the next page; `null` when there are no more rows.                                                                                                               |

<Info>
  Only DataTables owned by the authenticated user are accessible. This tool
  can't load another user's tables even within the same tenant.
</Info>

### load\_mailbox\_voice\_profile

Loads the writing voice profile for a specific connected mailbox, the same
profile Unify uses to personalize outbound copy in that mailbox's voice.

<ParamField body="connectedMailboxId" type="string" required>
  The ID of the connected mailbox to load the voice profile for.
</ParamField>

| Output field   | Type     | Description                                                          |
| :------------- | :------- | :------------------------------------------------------------------- |
| `voiceProfile` | `object` | The mailbox's voice profile. Shape is currently unstructured/opaque. |

<Info>
  The mailbox must be connected and owned by the authenticated user, and must
  already have an analyzed voice profile, otherwise the call errors.
</Info>

### load\_general\_context

Loads a specific version of the calling user's general business context:
the same information (business description, ICP, products, pricing, and so
on) used to ground Unify's Agents.

<ParamField body="generalContextId" type="string" required>
  The ID of the user general context to load.
</ParamField>

<ParamField body="versionId" type="string" required>
  The specific version of that context to load.
</ParamField>

| Output field | Type     | Description                                                                                                                                                                                                                                            |
| :----------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `context`    | `object` | Business context, including fields such as `companyName`, `businessDescription`, `industry`, `icp`, `targetBuyerPersonas`, `products`, `pricing`, `customers`, `valueProposition`, `size`, `stage`, `legalStructure`, `location`, and `versionNumber`. |

## Public API tools

These tools expose public API operations directly through MCP. Their input and
output schemas are included in the MCP tool definitions, so your client can
inspect the required fields before calling them.

### Objects and records

| Tool                                  | Purpose                                                  |
| :------------------------------------ | :------------------------------------------------------- |
| `list_objects`                        | List standard and custom objects.                        |
| `get_object`                          | Get an object definition by API name.                    |
| `create_object`                       | Create a custom object.                                  |
| `update_object`                       | Update an object's display name or description.          |
| `delete_object`                       | Delete an object.                                        |
| `list_object_attributes`              | List the attributes defined on an object.                |
| `get_object_attribute`                | Get an attribute by API name.                            |
| `create_object_attribute`             | Add an attribute to an object.                           |
| `update_object_attribute`             | Update an attribute's mutable fields.                    |
| `delete_object_attribute`             | Delete an attribute from an object.                      |
| `list_object_attribute_options`       | List options for a select attribute.                     |
| `get_object_attribute_option`         | Get one option for a select attribute.                   |
| `create_object_attribute_option`      | Add an option to a select attribute.                     |
| `update_object_attribute_option`      | Update a select option's display name.                   |
| `delete_object_attribute_option`      | Delete an option from a select attribute.                |
| `get_object_record`                   | Get a record by ID.                                      |
| `find_unique_object_record`           | Find one record using unique attribute values.           |
| `create_object_record`                | Create a record.                                         |
| `update_object_record`                | Update a record by ID.                                   |
| `upsert_object_record`                | Create or update a record using unique attribute values. |
| `delete_object_record`                | Delete a record by ID.                                   |
| `create_object_record_query_job`      | Start an asynchronous record export.                     |
| `list_object_record_query_jobs`       | List record query jobs for an object.                    |
| `get_object_record_query_job`         | Get a record query job's status.                         |
| `get_object_record_query_job_results` | Retrieve pages of record query job results.              |

### Sequences and enrollments

| Tool                                             | Purpose                                              |
| :----------------------------------------------- | :--------------------------------------------------- |
| `list_sequences`                                 | List Sequences.                                      |
| `retrieve_sequence`                              | Get a Sequence by ID.                                |
| `pause_sequence`                                 | Pause a Sequence and its enrollments.                |
| `resume_sequence`                                | Resume a paused Sequence.                            |
| `delete_sequence`                                | Delete a Sequence.                                   |
| `list_sequence_steps`                            | List a Sequence's steps.                             |
| `retrieve_sequence_step`                         | Get one Sequence step by ID.                         |
| `list_sequence_enrollments`                      | List Sequence enrollments.                           |
| `get_sequence_enrollment`                        | Get an enrollment by ID.                             |
| `create_sequence_enrollment`                     | Enroll a person in a Sequence.                       |
| `pause_sequence_enrollment`                      | Pause one enrollment.                                |
| `resume_sequence_enrollment`                     | Resume one enrollment.                               |
| `delete_sequence_enrollment`                     | Cancel one enrollment.                               |
| `create_sequence_enrollment_query_job`           | Start an asynchronous enrollment export.             |
| `list_sequence_enrollment_query_jobs`            | List enrollment query jobs.                          |
| `get_sequence_enrollment_query_job`              | Get an enrollment query job's status.                |
| `get_sequence_enrollment_query_job_results`      | Retrieve pages of enrollment query job results.      |
| `create_sequence_enrollment_step_query_job`      | Start an asynchronous enrollment-step export.        |
| `list_sequence_enrollment_step_query_jobs`       | List enrollment-step query jobs.                     |
| `get_sequence_enrollment_step_query_job`         | Get an enrollment-step query job's status.           |
| `get_sequence_enrollment_step_query_job_results` | Retrieve pages of enrollment-step query job results. |
| `cancel_sequence_enrollment_step_query_job`      | Cancel an in-progress enrollment-step query job.     |

### Tasks

| Tool                         | Purpose                                          |
| :--------------------------- | :----------------------------------------------- |
| `list_tasks`                 | List outreach and action-item tasks.             |
| `retrieve_task`              | Get a task by ID.                                |
| `create_task`                | Create a task for a person.                      |
| `update_task`                | Update a task's assignee, priority, or due date. |
| `complete_task`              | Mark a task as completed.                        |
| `delete_task`                | Delete a task.                                   |
| `create_task_query_job`      | Start an asynchronous task export.               |
| `list_task_query_jobs`       | List task query jobs.                            |
| `get_task_query_job`         | Get a task query job's status.                   |
| `get_task_query_job_results` | Retrieve pages of task query job results.        |

### Events

| Tool                          | Purpose                                       |
| :---------------------------- | :-------------------------------------------- |
| `create_event_query_job`      | Start an asynchronous analytics event export. |
| `list_event_query_jobs`       | List event query jobs.                        |
| `get_event_query_job`         | Get an event query job's status.              |
| `get_event_query_job_results` | Retrieve pages of event query job results.    |
