# Get store subscription (`get_store_subscription`)

Returns the connected Store subscription state: its status, plan name and display name, billing interval, whether it renews, and its trial and period end dates. It exists so an assistant can tell whether a feature the merchant is asking about is available on their plan. It reads billing state only and never starts, changes or cancels a subscription; this connector has no payment or checkout capability. It requires the store:read scope and has no side effects.

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

## Purpose

Tell a merchant whether their plan covers what they are asking for, before suggesting a change that their plan would refuse.

## Annotations

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

## Prerequisites

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

## Arguments

This tool takes no arguments.

## Result

One subscription object. No invoices, no payment method, no card data: none of that is reachable from this connector.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `request_id` | string | yes |  |
| `store` | object | yes |  |
| `store.id` | integer | yes |  |
| `store.name` | string | yes |  |
| `status` | string | yes | The subscription state. Expected to grow: tolerate unknown values. One of: `none`, `trialing`, `active`, `past_due`, `incomplete`, `unpaid`, `cancelling`, `cancelled`, `unknown`. |
| `plan` | string or null | no | The lowercase plan identifier, or null with no plan. |
| `plan_display_name` | string or null | no |  |
| `billing_interval` | string or null | no | monthly or yearly, or null with no plan. |
| `recurring` | boolean or null | no | Whether the plan renews at the end of its period. |
| `trial_ends_at` | string or null | no |  |
| `ends_at` | string or null | no | When the current period ends, or null while it renews indefinitely. |

## Error cases

| Code | Recovery |
| --- | --- |
| `insufficient_scope` | The connection was approved without store:read. Ask the merchant to reconnect and approve it. |

## Example: Read the connected store plan

Request:

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

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "structuredContent": {
      "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t",
      "store": {
        "id": 12,
        "name": "Demo Signs"
      },
      "status": "active",
      "plan": "seed",
      "plan_display_name": "Seed",
      "billing_interval": "monthly",
      "recurring": true,
      "trial_ends_at": null,
      "ends_at": null
    }
  }
}
```

## Example: A connection without store:read (error)

Request:

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

Response:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "structuredContent": {
      "error": {
        "code": "insufficient_scope",
        "title": "Insufficient scope",
        "detail": "The tool [get_store_subscription] requires the store:read scope, which this connection was not granted.",
        "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.",
        "required_scopes": [
          "store:read"
        ],
        "granted_scopes": [
          "customisers:read"
        ]
      }
    }
  }
}
```
