# Seal Subscriptions MCP by usefulapi (remote · seal-subscriptions.usefulapi.io)

Manage Seal Subscriptions on Shopify: subscriptions, billing attempts, items, discounts, rules.

- Trust score: 63/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `seal-subscriptions.usefulapi.io`: 63/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-seal-subscriptions/seal-subscriptions.md), [page](https://verifymcp.io/servers/io-usefulapi-seal-subscriptions/seal-subscriptions)

## Channel facts

- Endpoint: `https://seal-subscriptions.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.2.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 84/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3206 tokens (~118/item across 27 items; 27 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 92/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 75% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 28 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the Seal Subscriptions MCP by usefulapi server?

Seal Subscriptions MCP by usefulapi is a hosted endpoint at https://seal-subscriptions.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-seal-subscriptions 'https://seal-subscriptions.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-seal-subscriptions": {
      "url": "https://seal-subscriptions.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-seal-subscriptions": {
      "type": "http",
      "url": "https://seal-subscriptions.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-seal-subscriptions]
url = "https://seal-subscriptions.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-seal-subscriptions": {
      "type": "remote",
      "url": "https://seal-subscriptions.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-seal-subscriptions --url 'https://seal-subscriptions.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-seal-subscriptions:
    url: "https://seal-subscriptions.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-seal-subscriptions": {
      "Transport": "http",
      "Url": "https://seal-subscriptions.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-seal-subscriptions -t streamable-http -u 'https://seal-subscriptions.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-seal-subscriptions": {
      "type": "http",
      "url": "https://seal-subscriptions.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 63, +1)

- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.2.0 → 1.2.3

### 2026-10-24 (score 62)

First indexed and scored.

## MCP tools (27)

### `sealsubscriptions_list_subscriptions` (~171 tokens)

List subscriptions

List or search the shop's subscriptions (50 per page): status, customer, interval, total value, shipping address and card brand/last digits. Search by customer email, first or last name; filter by status; optionally include the items and the billing attempts of each. GET /subscriptions.

Input parameters:

- `page` (integer): Page number, from 1 (default 1); 50 per page. Pass the previous reply's next_page.
- `query` (string): Search text: customer email, first name or last name.
- `status` (string): Only subscriptions in this status (default: all).
- `with_billing_attempts` (boolean): Include each subscription's billing attempts (default false).
- `with_items` (boolean): Include each subscription's items (default false).

### `sealsubscriptions_list_subscriptions_by_billing_date` (~168 tokens)

List subscriptions by billing date

Subscriptions that have at least one billing attempt scheduled between two UTC date-times: the way to see what will be charged tomorrow or this week. Each subscription carries a cursor; pass the last one's cursor as `cursor` to get the next page. GET /subscriptions-by-billing-date.

Input parameters:

- `cursor` (string): Cursor of the last subscription of the previous page.
- `from_datetime` (string, required): Start of the period in UTC, yyyy-mm-ddThh:mm:ss, e.g. 2030-12-24T00:00:00.
- `to_datetime` (string, required): End of the period in UTC, yyyy-mm-ddThh:mm:ss, e.g. 2030-12-24T23:59:59.

### `sealsubscriptions_get_subscription` (~89 tokens)

Get subscription

One subscription with everything Seal knows: customer, shipping and billing address, status, intervals, delivery method, items with discounts, billing attempts (with status and error messages), fulfillment orders, invoices, tags and the activity log. Private customer links are removed. GET /subscription?id=.

Input parameters:

- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_list_subscription_rules` (~76 tokens)

List subscription rules

List the subscription rules (plans) of the shop: name, payment type, the products and variants they apply to and their selling plans. GET /subscription-rules.

Input parameters:

- `page` (integer): Page number, from 1 (default 1); 50 per page. Pass the previous reply's next_page.

### `sealsubscriptions_get_subscription_rule` (~53 tokens)

Get subscription rule

One subscription rule by id, with its products, variants and selling plans. GET /subscription-rule?id=.

Input parameters:

- `rule_id` (integer, required): Subscription rule id (from sealsubscriptions_list_subscription_rules).

### `sealsubscriptions_list_webhooks` (~33 tokens)

List webhooks

List the webhooks registered for this shop through the API (topic and address). GET /webhooks.

### `sealsubscriptions_pause_subscription` (~64 tokens)

Pause subscription

WRITE: Pause an active subscription: no further charges or shipments until it is resumed. Undo with sealsubscriptions_resume_subscription. PUT /subscription action=pause.

Input parameters:

- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_resume_subscription` (~54 tokens)

Resume subscription

WRITE: Resume a paused subscription so charges and shipments continue on the schedule. PUT /subscription action=resume.

Input parameters:

- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_reactivate_subscription` (~76 tokens)

Reactivate subscription

WRITE: Reactivate a cancelled subscription (the effect is the same as resume; use this for cancelled ones). Charges restart on the schedule, so the customer may be billed. PUT /subscription action=reactivate.

Input parameters:

- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_cancel_customer_subscription` (~88 tokens)

Cancel subscription

WRITE: Cancel a subscription now: all future charges and shipments stop and the customer may get Seal's cancellation email. It can be brought back with sealsubscriptions_reactivate_subscription. For a later cancellation use sealsubscriptions_schedule_cancellation. PUT /subscription action=cancel.

Input parameters:

- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_schedule_cancellation` (~122 tokens)

Schedule subscription cancellation

WRITE: Schedule the cancellation of a subscription for a future date and time (it stays active until then). PUT /subscription-schedule-cancellation.

Input parameters:

- `date` (string, required): Cancellation date, yyyy-mm-dd.
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).
- `time` (string, required): Cancellation time, hh:mm (24-hour), in the given timezone.
- `timezone` (string, required): UTC offset of the date and time, e.g. +00:00 or -04:00.

### `sealsubscriptions_add_items` (~86 tokens)

Add items to subscription

WRITE: Add products to a subscription. Prices are in the subscription's currency and change what the customer pays on the next charge. An item with one_time=true is removed after the next renewal. PUT /subscription action=add_items.

Input parameters:

- `items` (array, required)
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_edit_items` (~87 tokens)

Edit subscription items

WRITE: Change existing items of a subscription: variant, quantity (> 0), price (>= 0), SKU, one-time flag, properties. Changes what the customer pays on the next charge. PUT /subscription action=edit_items.

Input parameters:

- `items` (array, required)
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_remove_items` (~68 tokens)

Remove items from subscription

WRITE: Remove items from a subscription by item id. The customer stops receiving and paying for them. PUT /subscription action=remove_items.

Input parameters:

- `item_ids` (array, required)
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_edit_subscription` (~358 tokens)

Edit subscription

WRITE: Edit a subscription's schedule and details: delivery and billing interval (a billing interval longer than the delivery interval makes it prepaid), min/max number of payments, note attributes (an empty list removes them), delivery method and price, and the shipping address. Only the fields you pass change. To change items use the item tools. PUT /subscription action=edit.

Input parameters:

- `automatically_update_product_prices` (boolean): When switching between prepaid and not prepaid, reprice the items.
- `billing_interval` (string): Billing interval, e.g. "8 week". Longer than delivery_interval = prepaid.
- `billing_max_cycles` (integer): Maximum number of payments (0 = unlimited).
- `billing_min_cycles` (integer): Minimum number of payments.
- `delivery_interval` (string): Delivery interval, e.g. "4 week" or "1 month".
- `delivery_method_code` (string)
- `delivery_method_presentment_title` (string)
- `delivery_method_title` (string)
- `delivery_price` (number)
- `note_attributes` (array): Replaces all note attributes.
- `s_address1` (string)
- `s_address2` (string)
- `s_city` (string)
- `s_company` (string)
- `s_country` (string)
- `s_country_code` (string)
- `s_first_name` (string)
- `s_last_name` (string)
- `s_phone` (string)
- `s_province` (string)
- `s_province_code` (string)
- `s_zip` (string)
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_reschedule_billing_attempt` (~183 tokens)

Reschedule billing attempt

WRITE: Move a billing attempt that has not been processed yet to another date and time. With reset_schedule=true the later attempts are rebuilt from the new date. PUT /subscription-billing-attempt action=reschedule.

Input parameters:

- `billing_attempt_id` (integer, required): Billing attempt id (billing_attempts[].id from sealsubscriptions_get_subscription).
- `date` (string, required): New date, yyyy-mm-dd.
- `reset_schedule` (boolean): Rebuild the rest of the schedule after this attempt (default false).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).
- `time` (string, required): New time, hh:mm (24-hour), in the given timezone.
- `timezone` (string, required): UTC offset of the date and time, e.g. +00:00 or -04:00.

### `sealsubscriptions_skip_billing_attempt` (~97 tokens)

Skip billing attempt

WRITE: Skip one upcoming billing attempt so the customer is not charged for that cycle. Undo with sealsubscriptions_unskip_billing_attempt. PUT /subscription-billing-attempt action=skip.

Input parameters:

- `billing_attempt_id` (integer, required): Billing attempt id (billing_attempts[].id from sealsubscriptions_get_subscription).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_unskip_billing_attempt` (~89 tokens)

Unskip billing attempt

WRITE: Bring back a skipped billing attempt, so it is charged on its date again. PUT /subscription-billing-attempt action=unskip.

Input parameters:

- `billing_attempt_id` (integer, required): Billing attempt id (billing_attempts[].id from sealsubscriptions_get_subscription).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_delete_billing_attempt` (~112 tokens)

Delete billing attempt

WRITE: Delete a billing attempt that has not been processed. Seal keeps 65 days of attempts scheduled, so a deleted one is recreated within hours unless the schedule is moved first (see sealsubscriptions_reschedule_billing_attempt). DELETE /subscription-billing-attempt.

Input parameters:

- `billing_attempt_id` (integer, required): Billing attempt id (billing_attempts[].id from sealsubscriptions_get_subscription).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_reschedule_fulfillment_order` (~148 tokens)

Reschedule fulfillment order

WRITE: Move a fulfillment order of a prepaid subscription to another date and time. PUT /subscription-fulfillment-order action=reschedule.

Input parameters:

- `date` (string, required): New date, yyyy-mm-dd.
- `fulfillment_order_id` (integer, required): Fulfillment order id (fulfillment_orders[].id from sealsubscriptions_get_subscription).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).
- `time` (string, required): New time, hh:mm (24-hour), in the given timezone.
- `timezone` (string, required): UTC offset of the date and time, e.g. +00:00 or -04:00.

### `sealsubscriptions_create_charge_now` (~124 tokens)

Charge subscription now

WRITE: CHARGES THE CUSTOMER'S PAYMENT METHOD IMMEDIATELY for the next billing attempt of the subscription and creates a Shopify order; it does not wait for the scheduled date. Only call it when the user clearly asked for an immediate charge. With reset_schedule=true the later attempts are rebuilt from today. PUT /subscription-create-charge-now.

Input parameters:

- `reset_schedule` (boolean): Rebuild the rest of the schedule after this charge (default false).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_process_charge` (~105 tokens)

Process a specific charge

WRITE: CHARGES THE CUSTOMER'S PAYMENT METHOD NOW for one specific billing attempt (for example a failed or upcoming one) and creates a Shopify order. Only call it when the user clearly asked for that charge. PUT /subscription-process-charge.

Input parameters:

- `billing_attempt_id` (integer, required): Billing attempt id (billing_attempts[].id from sealsubscriptions_get_subscription).
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_apply_discount_code` (~92 tokens)

Apply discount code

WRITE: Apply a Shopify discount code to an auto-charging subscription (not to recurring-invoice subscriptions); it lowers what the customer pays on the next charges. PUT /subscription-discount-code action=apply.

Input parameters:

- `discount_code` (string, required): The discount code as the customer would type it.
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_remove_discount_code` (~103 tokens)

Remove discount code

WRITE: Remove a discount code from a subscription. Use the discount code id from the subscription's items[].discount_codes[].id (a uuid), not the code text. DELETE /subscription-discount-code.

Input parameters:

- `discount_code_id` (string, required): Discount code id (a uuid) from sealsubscriptions_get_subscription → items[].discount_codes[].id.
- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_send_payment_method_update_email` (~86 tokens)

Email customer to update payment method

WRITE: SENDS AN EMAIL TO THE CUSTOMER of the subscription with a link to update their payment method (for example after failed charges). Only call it when the user clearly asked to contact the customer. PUT /subscription action=send_payment_method_update_email.

Input parameters:

- `subscription_id` (integer, required): The subscription's `id` (not its `internal_id`).

### `sealsubscriptions_edit_subscription_rule` (~148 tokens)

Edit subscription rule

WRITE: Edit a subscription rule: its name, the plan selector label (`options`, e.g. "Deliver every") and the products it applies to. product_variants REPLACES all products and variants linked to the rule: to add some without removing the others use sealsubscriptions_append_rule_product_variants. PUT /subscription-rule.

Input parameters:

- `name` (string)
- `options` (string): Label for the plan selector, e.g. "Deliver every".
- `product_variants` (array): The complete new list of products/variants (replaces the current list; an empty list unlinks every product).
- `rule_id` (integer, required): Subscription rule id.

### `sealsubscriptions_append_rule_product_variants` (~66 tokens)

Add products to subscription rule

WRITE: Add products or variants to a subscription rule without touching the ones already linked. PUT /subscription-rule/append-product-variants.

Input parameters:

- `product_variants` (array, required): Products/variants to add.
- `rule_id` (integer, required): Subscription rule id.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-seal-subscriptions/seal-subscriptions#diagnostics

## Score history

- 2026-10-25: 63
- 2026-10-24: 62

## Common questions

### What is the Seal Subscriptions MCP by usefulapi server?

Seal Subscriptions MCP by usefulapi is listed in the public MCP registry as io.usefulapi/seal-subscriptions. Manage Seal Subscriptions on Shopify: subscriptions, billing attempts, items, discounts, rules. This page covers its hosted endpoint (https://seal-subscriptions.usefulapi.io/mcp).

### Is the Seal Subscriptions MCP by usefulapi server safe to use?

Seal Subscriptions MCP by usefulapi scores 63 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Seal Subscriptions MCP by usefulapi server expose?

Seal Subscriptions MCP by usefulapi exposes 27 tools: sealsubscriptions_list_subscriptions, sealsubscriptions_list_subscriptions_by_billing_date, sealsubscriptions_get_subscription, sealsubscriptions_list_subscription_rules, sealsubscriptions_get_subscription_rule, and 22 more. Their descriptions and schemas cost roughly 2,946 tokens of context every time the server is loaded.

### Does the Seal Subscriptions MCP by usefulapi server require authentication?

Yes. Seal Subscriptions MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Seal Subscriptions MCP by usefulapi server still maintained?

Seal Subscriptions MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://seal-subscriptions.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/seal-subscriptions/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-seal-subscriptions/seal-subscriptions.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-seal-subscriptions/seal-subscriptions.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-seal-subscriptions/seal-subscriptions
