# Get AI sign design capabilities (`get_ai_sign_design_capabilities`)

Read whether the AI sign designer is available for this store, the image types and limits a source must meet, the output formats, the credit policy of one credit for each delivered design, and a timestamped snapshot of the store credits. Requires ai_sign_designs:read. Has no side effects and reserves no credit.

- Source URL: https://www.signcustomiser.com/help/mcp/tools/get_ai_sign_design_capabilities/
- Markdown URL: https://www.signcustomiser.com/help/mcp/tools/get_ai_sign_design_capabilities.md
- MCP endpoint: https://mcp.signcustomiser.com
- Required scope: `ai_sign_designs:read`
- Behaviour: read

## Purpose

Check that the AI sign designer is available and that the image meets its limits before declaring a source.

## Annotations

| Hint | Value |
| --- | --- |
| readOnlyHint | true |
| destructiveHint | false |
| idempotentHint | true |
| openWorldHint | false |

## Prerequisites

- A merchant has connected this store and approved the ai_sign_designs:read scope.

## Arguments

This tool takes no arguments.

## Result

Availability, the product families, the source limits (content types, filename extensions, maximum bytes, maximum side length and maximum decoded pixels), the output formats, the credit policy and the store credit snapshot.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `request_id` | string | yes |  |
| `store` | object | yes |  |
| `store.id` | integer | yes |  |
| `store.name` | string | yes |  |
| `available` | boolean | yes | False while the AI sign designer is turned off for this store, or while design jobs cannot start for it yet. Source declarations are refused only while the designer is turned off. |
| `product_families` | array of string | yes | Expected to grow: tolerate unknown values. |
| `source` | object | yes | The limits a source image must meet. The real bytes are checked against them when a design uses the source. |
| `source.content_types` | array of string | no |  |
| `source.file_extensions` | array of string | no |  |
| `source.max_byte_size` | integer | no |  |
| `source.max_dimension_px` | integer | no |  |
| `source.max_pixels` | integer | no |  |
| `source.upload_target_ttl_seconds` | integer | no |  |
| `source.retention_hours` | integer | no |  |
| `output_formats` | array of string | yes |  |
| `pricing` | object | yes |  |
| `pricing.credits_per_delivered_design` | integer | no |  |
| `pricing.credits_per_failed_design` | integer | no |  |
| `credits` | object | yes | The store credit wallet at observed_at. available_units is what a new design can spend now. |
| `credits.available_units` | integer | no |  |
| `credits.plan_units` | integer | no |  |
| `credits.purchased_units` | integer | no |  |
| `credits.held_units` | integer | no |  |
| `credits.plan_cycle_ends_at` | string or null | no |  |
| `credits.observed_at` | string | no |  |

## Error cases

| Code | Recovery |
| --- | --- |
| `insufficient_scope` | The connection was approved without ai_sign_designs:read. |

## Example: Read the capabilities of an available store

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_ai_sign_design_capabilities",
    "arguments": {}
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "available": true,
      "product_families": [
        "neon",
        "channel_letter",
        "metal_cut_out"
      ],
      "source": {
        "content_types": [
          "image/png",
          "image/jpeg",
          "image/webp"
        ],
        "file_extensions": [
          "png",
          "jpg",
          "jpeg",
          "jfif",
          "webp"
        ],
        "max_byte_size": 5242880,
        "max_dimension_px": 8192,
        "max_pixels": 16777216,
        "upload_target_ttl_seconds": 600,
        "retention_hours": 24
      },
      "output_formats": [
        "svg",
        "eps",
        "illustrator_pdf"
      ],
      "pricing": {
        "credits_per_delivered_design": 1,
        "credits_per_failed_design": 0
      },
      "credits": {
        "available_units": 42,
        "plan_units": 40,
        "purchased_units": 2,
        "held_units": 1,
        "plan_cycle_ends_at": "2026-11-01T00:00:00Z",
        "observed_at": "2026-10-20T09:30:00Z"
      }
    }
  }
}
```

## Example: A connection without the AI read scope (error)

Request:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_ai_sign_design_capabilities",
    "arguments": {}
  }
}
```

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "insufficient_scope",
        "title": "Insufficient scope",
        "detail": "This operation requires the ai_sign_designs:read scope.",
        "recovery": "The connection was authorised without the scope this tool needs. Ask the merchant to reconnect the connector and approve the scope named in required_scopes. Do not retry this call."
      }
    }
  }
}
```
