# Get AI sign design source (`get_ai_sign_design_source`)

Read the status of an AI sign design source created through the current connection. uploaded means the bytes arrived and are not yet verified; consumed means a design verified and used them; rejected gives the verification failure code. It never returns the presigned target. Requires ai_sign_designs:read. Has no side effects.

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

## Purpose

Confirm that the bytes of a source arrived, or find out why verification rejected them.

## Annotations

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

## Prerequisites

- Use a source id created through the current connection, including after token refresh.
- A merchant has connected this store and approved the ai_sign_designs:read scope.

## Arguments

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `source_id` | string | yes | The source id create_ai_sign_design_source returned. |

## Result

One source record. The presigned target and its headers are deliberately omitted; they are returned only once, by create_ai_sign_design_source.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `request_id` | string | yes |  |
| `store` | object | yes |  |
| `store.id` | integer | yes |  |
| `store.name` | string | yes |  |
| `source_id` | string | yes |  |
| `filename` | string | no |  |
| `content_type` | string | no |  |
| `byte_size` | integer | no |  |
| `status` | string | yes | pending, uploaded (arrived, not verified), consumed (verified and used), rejected or expired. Expected to grow: tolerate unknown values. One of: `pending`, `uploaded`, `consumed`, `rejected`, `expired`. |
| `verification_failure_code` | string or null | no | Why verification rejected the bytes, or null. Expected to grow. One of: `size_mismatch`, `too_large`, `content_type_mismatch`, `dimensions_exceeded`, `pixel_limit_exceeded`, `undecodable`. |
| `width_px` | integer or null | no |  |
| `height_px` | integer or null | no |  |
| `expires_at` | string | no |  |
| `consumed_at` | string or null | no |  |
| `created_at` | string | no |  |

## Error cases

| Code | Recovery |
| --- | --- |
| `insufficient_scope` | The connection was approved without ai_sign_designs:read. |
| `resource_not_found` | The id is unknown, expired and pruned, or belongs to another connection or store. |

## Example: Poll a source whose bytes have arrived

Request:

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

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "source_id": "aisrc_9f2c4b7ad13e6058ba41cd4201",
      "filename": "shopfront-logo.png",
      "content_type": "image/png",
      "byte_size": 482133,
      "status": "uploaded",
      "verification_failure_code": null,
      "width_px": null,
      "height_px": null,
      "expires_at": "2026-10-21T09:30:00Z",
      "consumed_at": null,
      "created_at": "2026-10-20T09:30:00Z"
    }
  }
}
```

## Example: A source id this connection does not own (error)

Request:

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

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "resource_not_found",
        "title": "Resource not found",
        "detail": "The requested resource does not exist or does not belong to the authenticated store.",
        "recovery": "The identifier does not exist in this store. Use the matching list tool to rediscover a valid id."
      }
    }
  }
}
```
