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

# C1 MCP

> Connect AI assistants like Claude Desktop, Codex, Cursor, and VS Code to query your C1 data using the Model Context Protocol (MCP).

Connect AI assistants like Claude Desktop, Codex, Cursor, and VS Code to query your C1 data using the Model Context Protocol (MCP).

<Note>
  This page covers querying C1's own identity governance data from your AI client. If you're looking to govern AI access to external tools like Salesforce or GitHub, see [AI access management](/product/admin/aiam-overview).
</Note>

<Note>
  AI Connections are read-only. Connected AI assistants can view your C1 data but cannot create, modify, or delete any configuration.
</Note>

## Security considerations

AI Connections is designed with security as a priority:

* **Read-only access:** AI assistants cannot modify any data or configuration.
* **User-scoped authorization:** Each user authorizes their own connections.
* **IP restrictions:** Optional IP allow listing for network-level control.
* **Audit logging:** All AI queries are logged in the system log.
* **Revocable access:** Connections can be revoked at any time.

## Prerequisites

Before users can connect AI assistants, a C1 administrator must complete the following setup.

### Turn on AI connections

A Super Admin must enable AI connections in your tenant settings:

<Steps>
  <Step>
    Navigate to **Settings** > **AI connections**.
  </Step>

  <Step>
    At the top of the **AI connections** page, click **Edit** and toggle **Enable AI connections** to on.
  </Step>

  <Step>
    Click **Save**.
  </Step>
</Steps>

<Tip>
  Once enabled, the MCP server URL is not shown on this settings page. Each user must navigate to their user profile menu and click **AI & API** > **AI connections** to find their MCP server URL.
</Tip>

### Optional: Configure IP restrictions

For additional security, you can restrict which IP addresses can use AI connections:

<Steps>
  <Step>
    Navigate to **Settings** in the left sidebar.
  </Step>

  <Step>
    Under the **Security** sub-section, select **SSO & sessions**.
  </Step>

  <Step>
    Scroll down to the **Global IP allow list configuration**.
  </Step>

  <Step>
    Find the **AI connections** section.
  </Step>

  <Step>
    Add allowed CIDR ranges.
  </Step>

  <Step>
    Click **Save**.
  </Step>
</Steps>

<Note>
  If you configure IP restrictions, AI assistants will only work from the specified IP ranges. This is useful for restricting usage to corporate networks or VPNs.
</Note>

## Connect an AI assistant

<Note>
  Only users with **Super Admin** or **Read-Only Admin** roles can authorize AI connections.
</Note>

<Steps>
  <Step>
    **Get the MCP server URL**

    In C1, navigate to your user profile menu and click **AI & API** > **AI connections**. Copy the MCP server URL displayed at the top of the page:

    ```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
    https://<your-tenant>-mcp.conductor.one/v1
    ```
  </Step>

  <Step>
    **Configure your AI assistant**

    Add the MCP server URL to your AI assistant's configuration:

    <Tabs>
      <Tab title="Claude Desktop">
        1. Open Claude Desktop settings.
        2. Navigate to the MCP servers section.
        3. Add a new server with the C1 MCP URL.
        4. Save and restart Claude Desktop.
      </Tab>

      <Tab title="Claude Code">
        1. From your terminal, add the C1 MCP server using the `claude mcp add` command:

           ```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
           claude mcp add --transport http c1 https://<your-tenant>-mcp.conductor.one/v1
           ```

           Replace `<your-tenant>` with your C1 tenant subdomain.
        2. Start Claude Code and run the `/mcp` slash command.
        3. Select the **c1** server and choose **Authenticate**. Your browser opens to C1 to complete the authorization step described below.
        4. Once authenticated, the server status appears as connected in the `/mcp` view.

        <Tip>
          By default, `claude mcp add` registers the server in your local project scope. Use `--scope user` to make the connection available across all projects, or `--scope project` to share the configuration with collaborators via a checked-in `.mcp.json` file.
        </Tip>
      </Tab>

      <Tab title="Codex">
        1. From your terminal, add the C1 MCP server using the `codex mcp add` command:

           ```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
           codex mcp add c1 --url https://<your-tenant>-mcp.conductor.one/v1
           ```

           Replace `<your-tenant>` with your C1 tenant subdomain.
        2. Verify the server is configured:

           ```bash theme={"theme":{"light":"css-variables","dark":"css-variables"}}
           codex mcp list
           ```
        3. Start Codex in the CLI or IDE extension and connect to the **c1** MCP server. Your browser opens to C1 to complete the authorization step described below.

        <Tip>
          Codex shares MCP configuration between the CLI and IDE extension. You can also add the server directly in `~/.codex/config.toml`:

          ```toml theme={"theme":{"light":"css-variables","dark":"css-variables"}}
          [mcp_servers.c1]
          url = "https://<your-tenant>-mcp.conductor.one/v1"
          ```
        </Tip>
      </Tab>

      <Tab title="Cursor">
        1. Open Cursor settings.
        2. Navigate to the **Tools and MCP** configuration.
        3. Add the C1 MCP server URL in the JSON editor.
        4. Save your configuration.
      </Tab>
    </Tabs>
  </Step>

  <Step>
    **Authorize the connection**

    When your AI assistant first connects, you'll be redirected to C1 to authorize the connection:

    1. Review the connection details.
    2. **Optional.** Customize the connection name.
    3. The connection is granted Read-Only Admin access.
    4. Click **Allow** to authorize.
  </Step>

  <Step>
    **Start querying**

    Once authorized, your AI assistant can query C1 data. The connection appears in your user profile under **AI & API** > **AI connections**.
  </Step>
</Steps>

## Available tools

Connected AI assistants have access to the following query tools:

| Tool                      | Description                                           |
| :------------------------ | :---------------------------------------------------- |
| `find_api_objects`        | Query objects by identifiers, search text, or filters |
| `count_api_objects`       | Count objects matching specific criteria              |
| `list_object_types`       | List all available object types                       |
| `describe_object_filters` | Get filterable fields for an object type              |
| `get_object_schema`       | Get the JSON schema for an object type                |

## Queryable objects

AI assistants can query 20 different object types across your C1 tenant.

### Identity and applications

| Object      | Description                                  |
| :---------- | :------------------------------------------- |
| `User`      | Identity accounts in your directory          |
| `App`       | Applications and directories connected to C1 |
| `Connector` | Data sync connectors for applications        |
| `Task`      | Access requests, reviews, and other tickets  |
| `Policy`    | Approval workflows and access policies       |

### Application data model

| Object            | Description                                 |
| :---------------- | :------------------------------------------ |
| `AppUser`         | Application accounts linked to identities   |
| `AppResourceType` | Categories of resources within applications |
| `AppResource`     | Specific resources within applications      |
| `AppEntitlement`  | Permissions and roles within applications   |
| `Grant`           | Entitlement assignments to users            |

### Access reviews

| Object                  | Description                      |
| :---------------------- | :------------------------------- |
| `AccessReview`          | Access review campaigns          |
| `AccessReviewTemplate`  | Templates for recurring reviews  |
| `AccessReviewSelection` | Individual items within a review |

### Access conflicts and separation of duties

| Object            | Description                   |
| :---------------- | :---------------------------- |
| `ConflictMonitor` | Separation of duties policies |
| `AccessViolation` | Detected SoD violations       |

### Supporting objects

| Object           | Description                                                  |
| :--------------- | :----------------------------------------------------------- |
| `RequestCatalog` | Collections of requestable entitlements in an Access Profile |
| `Webhook`        | Event notification configurations                            |
| `Directory`      | Account sync configurations                                  |
| `ProfileType`    | Attribute mapping configurations                             |
| `RoleBinding`    | C1 role assignments                                          |

## Example queries

Here are some examples of questions you can ask your AI assistant.

**Access analysis**

* "Who has access to Salesforce?"
* "What apps does [jane@company.com](mailto:jane@company.com) have access to?"
* "Show me all users with admin access to AWS"
* "List all entitlements for the Engineering group"

**Access requests**

* "Show me all pending access requests"
* "How many access requests were created this week?"
* "Find all denied access requests for the Finance app"
* "What requests are waiting for my approval?"

**Access reviews**

* "List access review campaigns that are in progress"
* "How many items are in the Q4 access review?"
* "Show me completed access reviews from this month"
* "Which access reviews are past their due date?"

**Compliance**

* "Find all separation of duties violations"
* "Which users have conflicting access?"
* "Show me all active conflict monitors"
* "List users who violate the Finance-Engineering SoD policy"

## Managing connections

### View connections

Navigate to your user profile menu and click **AI & API** > **AI connections** to see all AI connections you've authorized. Each connection shows:

* AI assistant name and icon
* Client ID
* Connection date
* Last used date

### Revoke a connection

<Steps>
  <Step>
    Navigate to your user profile menu and click **AI & API** > **AI connections**.
  </Step>

  <Step>
    Find the connection you want to revoke.
  </Step>

  <Step>
    Click **Revoke**.
  </Step>

  <Step>
    Type the connection name to confirm.
  </Step>

  <Step>
    Click **Confirm**.
  </Step>
</Steps>

<Note>
  Revoking a connection immediately prevents the AI assistant from accessing your C1 data. You can re-authorize the connection later if needed.
</Note>

### Admin management

Super Admins can navigate to **Settings** > **AI connections** to view and revoke all connections across the tenant.

## System log events

All MCP activity is recorded in the C1 system log. You can use these event types to monitor and alert on AI connection activity:

| Event             | Activity Name       | Description                                                           |
| :---------------- | :------------------ | :-------------------------------------------------------------------- |
| MCP Session Start | `mcp_session_start` | Logged when an AI assistant establishes a connection                  |
| MCP Session End   | `mcp_session_end`   | Logged when an AI assistant disconnects (includes session statistics) |
| MCP Tool Call     | `mcp_tool_call`     | Logged for each tool invocation (query, count, and so on)             |

### System log matching rules

Use these filters in **Settings** > **System Log** to monitor AI connection activity:

All MCP activity:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
activity_name starts with "mcp_"
```

Session connections only:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
activity_name = "mcp_session_start"
```

Tool calls only:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
activity_name = "mcp_tool_call"
```

Failed tool calls:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
activity_name = "mcp_tool_call" AND outcome = "FAILURE"
```

Activity by specific user:

```text theme={"theme":{"light":"css-variables","dark":"css-variables"}}
activity_name starts with "mcp_" AND actor.user.email = "user@example.com"
```

### Session event details

Each MCP session event includes:

| Field            | Description                                                       |
| :--------------- | :---------------------------------------------------------------- |
| Session ID       | Unique identifier for the connection                              |
| User             | The C1 user who authorized the connection                         |
| Source IP        | IP address of the AI assistant                                    |
| User Agent       | Client identifier (for example, Claude Desktop, Codex, or Cursor) |
| Duration         | Session length (in session end events)                            |
| Tool call counts | Success/failure statistics (in session end events)                |

### Tool call event details

Each tool call event includes:

| Field        | Description                                                 |
| :----------- | :---------------------------------------------------------- |
| Tool name    | Which tool was invoked (for example, `find_api_objects`)    |
| Object type  | The API object being queried (for example, `User` or `App`) |
| Result count | Number of objects returned                                  |
| Duration     | Query execution time                                        |
| Outcome      | Success or failure status                                   |

## Frequently asked questions about AI connections

<AccordionGroup>
  <Accordion title="Can the AI modify my C1 configuration?">
    No. AI Connections are granted **Read-Only Admin** access. Connected AI assistants can view and query your data, but they cannot create, update, or delete any configuration, users, or access assignments.
  </Accordion>

  <Accordion title="Who can authorize AI connections?">
    Only users with **Super Admin** or **Read-Only Admin** roles can authorize AI connections for their own use at this time.
  </Accordion>

  <Accordion title="What AI tools are compatible?">
    Any tool that supports the Model Context Protocol (MCP) can connect to C1, including:

    * Claude Desktop
    * Claude Code
    * Codex
    * Cursor
    * VS Code (with MCP extensions)
    * Other MCP-compatible AI assistants

    Cursor currently gives the best experience because it handles large tool call results more gracefully than other clients. Queries that return many objects — Task queries in particular — can use a lot of context window. We're working on improving this for all clients.
  </Accordion>

  <Accordion title="How do I restrict where AI connections can be used?">
    Administrators can configure IP allow lists in **Settings** > **IP Allowlist** > **AI connections** to restrict access to specific IP ranges. This is useful for limiting usage to corporate networks or VPNs.
  </Accordion>

  <Accordion title="Can I see what queries the AI is making?">
    Yes. AI connection activity is logged in your C1 system log. See [System log events](#system-log-events) for details.
  </Accordion>

  <Accordion title="What happens if I revoke a connection?">
    The AI assistant immediately loses access to your C1 data. Any ongoing queries will fail. You can re-authorize the same AI assistant later by going through the connection flow again.
  </Accordion>

  <Accordion title="Is my data sent to AI providers?">
    When you query data through an AI assistant, the query results are sent to the AI provider (for example, Anthropic for Claude) to generate responses. Only the data specifically requested by your queries is transmitted. C1 does not send your data to any AI providers in the MCP flow — it is sent by clients under your control.
  </Accordion>
</AccordionGroup>
