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

# MCP Tools Reference

> Complete reference for Char SaaS MCP tools

The Char SaaS MCP exposes these tools at `https://app.usechar.ai/mcp`.

## Profile

### get\_profile

Returns the authenticated user's profile and organization memberships.

**Input**: None

**Output**:

```json theme={null}
{
  "id": "user_01ABC...",
  "email": "user@example.com",
  "name": "Jane Doe",
  "organizations": [
    {
      "id": "org_01ABC...",
      "name": "Acme Corp",
      "slug": "acme-corp",
      "role": "admin"
    }
  ]
}
```

***

## Organizations

### list\_organizations

Returns all organizations the authenticated user belongs to.

**Input**: None

**Output**:

```json theme={null}
{
  "organizations": [
    {
      "id": "org_01ABC...",
      "name": "Acme Corp",
      "slug": "acme-corp",
      "role": "admin"
    }
  ],
  "count": 1
}
```

### get\_organization

Returns details of an organization by ID or slug.

**Input**:

| Parameter | Type   | Required | Description                            |
| --------- | ------ | -------- | -------------------------------------- |
| `id`      | string | No       | Organization ID (e.g., `org_01ABC...`) |
| `slug`    | string | No       | Organization slug                      |

Provide either `id` or `slug`, not both.

**Output**:

```json theme={null}
{
  "id": "org_01ABC...",
  "name": "Acme Corp",
  "slug": "acme-corp",
  "role": "admin"
}
```

### list\_members

Returns all members of the current organization. Requires organization context.

**Input**: None

**Output**:

```json theme={null}
{
  "members": [
    {
      "user_id": "user_01ABC...",
      "email": "user@example.com",
      "name": "Jane Doe",
      "role": "admin",
      "joined_at": "2024-01-15T10:30:00Z"
    }
  ],
  "count": 1
}
```

***

## Identity

### manage\_idp\_config

Gets, updates, or clears the identity provider configuration for SSO. Requires organization context and admin role.

**Input**:

| Parameter         | Type                                                                | Required | Description                                             |
| ----------------- | ------------------------------------------------------------------- | -------- | ------------------------------------------------------- |
| `action`          | `"get"` \| `"update"` \| `"clear"`                                  | Yes      | Action to perform                                       |
| `idp_type`        | `"okta"` \| `"azure"` \| `"auth0"` \| `"google"` \| `"custom_oidc"` | No       | Identity provider type (for update)                     |
| `idp_client_id`   | string                                                              | No       | OIDC client ID (for update)                             |
| `idp_domain`      | string                                                              | No       | Provider domain (for update)                            |
| `idp_issuer`      | string                                                              | No       | Full issuer URL (for update, required for custom\_oidc) |
| `allowed_domains` | string\[]                                                           | No       | Allowed origins for agent embedding (for update)        |

**Output**:

```json theme={null}
{
  "idp_type": "okta",
  "idp_client_id": "0oa1234...",
  "idp_domain": "acme.okta.com",
  "idp_issuer": null,
  "allowed_domains": ["https://app.example.com"]
}
```

### test\_idp\_connection

Tests connectivity to an identity provider by fetching its OIDC discovery document.

**Input**:

| Parameter    | Type                                                                | Required | Description                                       |
| ------------ | ------------------------------------------------------------------- | -------- | ------------------------------------------------- |
| `idp_type`   | `"okta"` \| `"azure"` \| `"auth0"` \| `"google"` \| `"custom_oidc"` | Yes      | Identity provider type                            |
| `idp_domain` | string                                                              | No       | Provider domain (required for okta, azure, auth0) |
| `idp_issuer` | string                                                              | No       | Full issuer URL (required for custom\_oidc)       |

**Output**:

```json theme={null}
{
  "success": true,
  "issuer": "https://acme.okta.com",
  "jwks_uri": "https://acme.okta.com/oauth2/v1/keys"
}
```

On failure:

```json theme={null}
{
  "success": false,
  "error": "Failed to fetch discovery document"
}
```

***

## Governance

### manage\_governance\_provider

Gets, updates, or clears the organization governance provider configuration used for policy decisions. Requires organization context and admin role.

**Input**:

| Parameter          | Type                               | Required | Description                                 |
| ------------------ | ---------------------------------- | -------- | ------------------------------------------- |
| `action`           | `"get"` \| `"update"` \| `"clear"` | Yes      | Action to perform                           |
| `provider_key`     | `"langguard"` \| `"byo"`           | No       | Provider key (for update)                   |
| `interceptor_url`  | string (URL)                       | No       | HTTPS interceptor endpoint (for update)     |
| `interceptor_name` | string                             | No       | Interceptor identifier (for update)         |
| `api_key`          | string                             | No       | Optional API key to set/rotate (for update) |
| `is_enabled`       | boolean                            | No       | Enable/disable policy checks (for update)   |

For `update`, omitted fields are merged with the current saved configuration.

**Output**:

```json theme={null}
{
  "action": "update",
  "effective_status": "active",
  "reason": "Provider is enabled and policy checks are active.",
  "config": {
    "provider_key": "langguard",
    "interceptor_url": "https://api.langguard.ai/interceptor",
    "interceptor_name": "policy-langguard.ai",
    "api_key_last4": "abcd",
    "has_api_key": true,
    "is_enabled": true,
    "last_test_status": "success",
    "last_test_message": "All policies passed.",
    "last_test_at": "2026-02-06T12:34:56.000Z",
    "created_at": "2026-02-06T12:30:00.000Z",
    "updated_at": "2026-02-06T12:34:56.000Z"
  }
}
```

### test\_governance\_provider

Tests governance provider connectivity and interceptor response contract. Requires organization context and admin role.

**Input**:

| Parameter          | Type                     | Required | Description                         |
| ------------------ | ------------------------ | -------- | ----------------------------------- |
| `provider_key`     | `"langguard"` \| `"byo"` | No       | Provider key override for this test |
| `interceptor_url`  | string (URL)             | No       | HTTPS interceptor endpoint override |
| `interceptor_name` | string                   | No       | Interceptor identifier override     |
| `api_key`          | string                   | No       | API key override for this test      |

When omitted, values are taken from the currently saved governance configuration.

**Output**:

```json theme={null}
{
  "provider_key": "langguard",
  "interceptor_url": "https://api.langguard.ai/interceptor",
  "interceptor_name": "policy-langguard.ai",
  "status": "notify",
  "message": "1 policy warning detected. Review recommended.",
  "violations": [
    {
      "policy_id": "POLICY_DATA_CLASSIFICATION",
      "status": "notify",
      "details": "Trace is missing required data classification metadata"
    }
  ],
  "latency_ms": 1320
}
```

***

## Plans

### list\_plans

Returns all available plan tiers.

**Input**: None

**Output**:

```json theme={null}
{
  "plans": [
    {
      "id": "plan_free",
      "name": "Free",
      "description": "For individuals and small teams",
      "features": {...},
      "limits": {...},
      "created_at": "2024-01-01T00:00:00Z",
      "updated_at": "2024-01-01T00:00:00Z"
    }
  ],
  "count": 3
}
```

### get\_plan\_info

Returns the current organization's plan, features, and usage. Requires organization context.

**Input**:

| Parameter | Type                                              | Required | Description                        |
| --------- | ------------------------------------------------- | -------- | ---------------------------------- |
| `include` | `"basic"` \| `"features"` \| `"usage"` \| `"all"` | No       | What to include (default: `"all"`) |

**Output** (with `include: "all"`):

```json theme={null}
{
  "plan": {
    "id": "plan_pro",
    "name": "Pro",
    "description": "For growing teams"
  },
  "features": {
    "sso": true,
    "custom_domains": false
  },
  "limits": {
    "seats": 10,
    "end_users": 1000
  },
  "usage": {
    "seats_used": 3,
    "end_users_used": 150
  }
}
```

### check\_feature

Checks if a specific feature is accessible for the current organization.

**Input**:

| Parameter       | Type                                                                                      | Required | Description                                |
| --------------- | ----------------------------------------------------------------------------------------- | -------- | ------------------------------------------ |
| `feature`       | `"sso"` \| `"scim"` \| `"audit_logs"` \| `"custom_domains"` \| `"end_users"` \| `"seats"` | Yes      | Feature to check                           |
| `current_usage` | number                                                                                    | No       | Current usage count (for limited features) |

**Output**:

```json theme={null}
{
  "feature": "sso",
  "allowed": true,
  "reason": null
}
```

On denial:

```json theme={null}
{
  "feature": "custom_domains",
  "allowed": false,
  "reason": "Requires Pro plan or higher"
}
```

***

## Subscriptions

### get\_subscription

Returns the current organization's subscription information.

**Input**:

| Parameter | Type                                       | Required | Description                           |
| --------- | ------------------------------------------ | -------- | ------------------------------------- |
| `detail`  | `"active_check"` \| `"status"` \| `"full"` | No       | Level of detail (default: `"status"`) |

**Output** (with `detail: "status"`):

```json theme={null}
{
  "has_subscription": true,
  "is_active": true,
  "status": "active",
  "plan_id": "plan_pro",
  "current_period_end": "2024-02-15T00:00:00Z",
  "cancel_at": null
}
```

### get\_billing\_url

Returns a checkout or customer portal URL.

**Input**:

| Parameter    | Type                       | Required | Description                              |
| ------------ | -------------------------- | -------- | ---------------------------------------- |
| `type`       | `"checkout"` \| `"portal"` | Yes      | URL type                                 |
| `product_id` | string                     | No       | Polar product ID (required for checkout) |

**Output**:

```json theme={null}
{
  "url_type": "portal",
  "url": "https://polar.sh/..."
}
```

### sync\_subscription

Forces a sync of subscription data from Polar.

**Input**: None

**Output**:

```json theme={null}
{
  "synced": 1,
  "deleted": 0
}
```

***

## Hub

### hub\_list\_tools

Lists browser tools available from connected WebMCP tabs.

**Input**:

| Parameter         | Type    | Required | Description                                              |
| ----------------- | ------- | -------- | -------------------------------------------------------- |
| `search`          | string  | No       | Filter tools by name or description                      |
| `source_id`       | string  | No       | Filter to tools from a specific source/tab               |
| `include_sources` | boolean | No       | Include source metadata for each tool (default: `false`) |

**Output**:

```json theme={null}
{
  "count": 2,
  "tools": [
    {
      "name": "submit_form",
      "description": "Submit the contact form",
      "inputSchema": {...}
    }
  ]
}
```

### hub\_list\_sources

Lists active browser tabs/sources that have registered tools.

**Input**: None

**Output**:

```json theme={null}
{
  "count": 1,
  "sources": [
    {
      "sourceId": "src_01ABC...",
      "tabId": "tab_123",
      "origin": "https://app.example.com",
      "title": "My App",
      "url": "https://app.example.com/dashboard",
      "toolCount": 3,
      "connectedAt": "2024-01-15T10:30:00Z",
      "lastSeenAt": "2024-01-15T10:35:00Z"
    }
  ]
}
```

### hub\_call\_tool

Executes a browser tool by name.

**Input**:

| Parameter   | Type   | Required | Description                                                              |
| ----------- | ------ | -------- | ------------------------------------------------------------------------ |
| `tool_name` | string | Yes      | Name of the tool to call                                                 |
| `args`      | object | No       | Arguments to pass to the tool                                            |
| `source_id` | string | No       | Specific source/tab ID (required if multiple sources have the same tool) |

**Output**: Varies by tool. Returns the tool's response content.

***

## Utility

### echo

Echoes back a message. Useful for testing the MCP connection.

**Input**:

| Parameter | Type   | Required | Description                         |
| --------- | ------ | -------- | ----------------------------------- |
| `message` | string | Yes      | Message to echo (1-1000 characters) |

**Output**:

```json theme={null}
{
  "message": "Echo: Hello, world!"
}
```

### verify\_api\_access

Verifies the current session has valid API access.

**Input**: None

**Output**:

```json theme={null}
{
  "status": "ok",
  "message": "Session verified with organization context",
  "authenticated": true,
  "user_email": "user@example.com",
  "organization_id": "org_01ABC...",
  "organization_name": "Acme Corp",
  "role": "admin",
  "token_expires_at": "2024-01-15T11:30:00Z",
  "token_expiring_soon": false,
  "has_refresh_token": true
}
```

***

## See also

* [Managing Char from Claude Code](/guides/char-saas-mcp)
* [Install MCP Servers](/guides/mcp-servers)

<Snippet file="support-cta.mdx" />
