Skip to content

Smartrr MCP by usefulapi

io.usefulapi/smartrrusefulapi.iostreamable-httpv1.0.0Scanned

Manage Smartrr subscriptions on Shopify: customers, orders, bills; pause, resume, cancel.

21 tools: 2 can delete or cancel things, 6 change things and 13 only read.

Tools: 2 delete, 0 irreversible, 6 write, 13 read.
  • Reads private data · 2
  • Reads text others write · 21
  • Can send data out · 0
  • 1 finding

Anlyon alternative

8 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

21 tools

Deletes or cancels 2Claude Code: deny
  • smartrr_cancel_customer_subscriptionWRITE, DESTRUCTIVE: cancel a customer's subscription in the merchant's store (this is the customer's Smartrr subscription, not your usefulapi plan).Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_cancel_customer_subscription" says "cancel": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE, DESTRUCTIVE: cancel a customer's subscription in the merchant's store (this is the customer's Smartrr subscription, not your usefulapi plan). It stops all future orders and charges; the reason may trigger Smartrr's configured cancellation emails or actions. It can be undone only with smartrr_resume_subscription. Get reason_id from smartrr_list_cancellation_reasons. PUT /vendor/customer/{customerId}/purchase-state/{subscriptionId}/cancel.

    Annotations the server declares

    • title: Cancel a customer's subscription
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • smartrr_retry_billWRITE, CHARGES THE CUSTOMER: retry a billing attempt now.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "write": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE, CHARGES THE CUSTOMER: retry a billing attempt now. If it succeeds the customer's saved payment method is charged for the bill amount and the order is created. Check the bill with smartrr_list_bills first; do not retry a succeeded bill. Not idempotent: each call can charge again. Requires confirm=true. POST /vendor/bill/{billId}/retry.

    Annotations the server declares

    • title: Retry a failed bill
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Changes things 6Claude Code: ask
  • smartrr_list_selling_plan_groupsThe store's subscription programs (selling plan groups) and their plans: name, options, delivery and billing frequency, discounts.Reads text others write1 finding

    Why it is in this group

    • The name "smartrr_list_selling_plan_groups" says "list": a word for reading.
    • The description's first verb is "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "smartrr_list_selling_plan_groups" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "smartrr_list_selling_plan_groups" says "list": a word for reading.

      What this check looks for
    Description, as the server wrote it
    The store's subscription programs (selling plan groups) and their plans: name, options, delivery and billing frequency, discounts. GET /vendor/selling-plan-group.

    Annotations the server declares

    • title: List subscription programs
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_pause_subscriptionWRITE: pause a customer's subscription until a date: no orders or charges are created while it is paused, then it resumes on that date.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: pause a customer's subscription until a date: no orders or charges are created while it is paused, then it resumes on that date. Reverse it with smartrr_resume_subscription. Takes the customer id and subscription id from smartrr_list_subscriptions. PUT /vendor/customer/{customerId}/purchase-state/{subscriptionId}/pause.

    Annotations the server declares

    • title: Pause a subscription
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • smartrr_resume_subscriptionWRITE: reactivate a paused or cancelled subscription; the customer will be billed on next_billing_date and every cycle after.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: reactivate a paused or cancelled subscription; the customer will be billed on next_billing_date and every cycle after. Customer-facing: it restarts charges to the customer's card. PUT /vendor/customer/{customerId}/purchase-state/{subscriptionId}/activate.

    Annotations the server declares

    • title: Resume a subscription
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • smartrr_set_next_billing_dateWRITE: change the date on which a subscription is next billed and its order created.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_set_next_billing_date" says "set": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: change the date on which a subscription is next billed and its order created. Customer-facing: the customer is charged on the new date. PUT /vendor/customer/{customerId}/purchase-state/{subscriptionId}/next-billing-date.

    Annotations the server declares

    • title: Set next billing date
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • smartrr_skip_orderWRITE: skip one scheduled order of a subscription (no order and no charge for that cycle; the schedule moves on).Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: skip one scheduled order of a subscription (no order and no charge for that cycle; the schedule moves on). `date` is the scheduled order date to skip; omit it to skip the next one. Reverse with smartrr_unskip_order. PUT /vendor/customer/{customerId}/purchase-state/{subscriptionId}/skip.

    Annotations the server declares

    • title: Skip a subscription order
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • smartrr_unskip_orderWRITE: restore a previously skipped order of a subscription, so it is billed and shipped again.Reads text others writeNo findings

    Why it is in this group

    • The description's first verb is "write": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    WRITE: restore a previously skipped order of a subscription, so it is billed and shipped again. `date` is the skipped order date; omit it to restore the earliest skip. PUT /vendor/customer/{customerId}/purchase-state/{subscriptionId}/unskip.

    Annotations the server declares

    • title: Unskip a subscription order
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 13Show 13 read-only tools
  • smartrr_get_analyticsActive subscription count and active subscriber count for each day in a date range.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_analytics" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Active subscription count and active subscriber count for each day in a date range. GET /vendor/analytics-simple.

    Annotations the server declares

    • title: Get subscription analytics
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_get_bill_historyThe audit trail of one bill: every status change, retry and error.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_bill_history" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    The audit trail of one bill: every status change, retry and error. GET /vendor/bill/{billId}/history.

    Annotations the server declares

    • title: Get bill history
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_get_orderOne order by its Shopify order id (the `shopifyId` field in smartrr_list_orders, passed as shown).Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_order" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    One order by its Shopify order id (the `shopifyId` field in smartrr_list_orders, passed as shown). GET /vendor/orders/{shopifyId}.

    Annotations the server declares

    • title: Get order
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_get_subscriptionOne subscription by its Shopify subscription id (the `shopifyId` field from smartrr_list_subscriptions, passed exactly as shown): status, schedule, next billing date, line items, d…Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_subscription" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    One subscription by its Shopify subscription id (the `shopifyId` field from smartrr_list_subscriptions, passed exactly as shown): status, schedule, next billing date, line items, discounts, shipping address, customer and payment method (brand, last digits and expiry only). GET /vendor/purchase-state/{shopifySubscriptionId}.

    Annotations the server declares

    • title: Get subscription
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_get_subscription_billsBilling attempts of one subscription (amount, status pending/processing/succeeded/failed/canceled, billing date, retry count, error), by its Shopify subscription id.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_subscription_bills" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Billing attempts of one subscription (amount, status pending/processing/succeeded/failed/canceled, billing date, retry count, error), by its Shopify subscription id. GET /vendor/purchase-state/{shopifySubscriptionId}/bills.

    Annotations the server declares

    • title: List a subscription's bills
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_get_subscription_eventsThe 250 most recent events on a subscription (pause, skip, cancel, activate, billing attempts and failures, line-item and address changes, discounts) with who did it.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_subscription_events" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    The 250 most recent events on a subscription (pause, skip, cancel, activate, billing attempts and failures, line-item and address changes, discounts) with who did it. GET /vendor/purchase-state/{shopifySubscriptionId}/events.

    Annotations the server declares

    • title: Get subscription history
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_get_subscription_ordersOrders generated by one subscription, by its Shopify subscription id.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_get_subscription_orders" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    Orders generated by one subscription, by its Shopify subscription id. GET /vendor/purchase-state/{shopifySubscriptionId}/orders.

    Annotations the server declares

    • title: List a subscription's orders
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_list_billsList billing attempts across all subscriptions with amount, status (pending, processing, succeeded, failed, canceled), billing date, retry count, error and the subscription and cus…Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_list_bills" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    List billing attempts across all subscriptions with amount, status (pending, processing, succeeded, failed, canceled), billing date, retry count, error and the subscription and customer. Filter by billing date; `status` filters the returned page only (use page_size 100 and next_page to cover more). Bill ids are numbers. GET /vendor/bill.

    Annotations the server declares

    • title: List bills
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_list_cancellation_reasonsThe cancellation reasons configured in Smartrr (id, type, text, action, retention discount).Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_list_cancellation_reasons" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    The cancellation reasons configured in Smartrr (id, type, text, action, retention discount). Use an `id` as reason_id when cancelling a subscription. GET /vendor/cancellation-reasons.

    Annotations the server declares

    • title: List cancellation reasons
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_list_customer_subscriptionsList the subscriptions of one customer, by Smartrr customer id (`custRel.id` from smartrr_list_subscriptions, or `id` from smartrr_list_customers).Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_list_customer_subscriptions" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    List the subscriptions of one customer, by Smartrr customer id (`custRel.id` from smartrr_list_subscriptions, or `id` from smartrr_list_customers). GET /vendor/customer/{customerRelationshipId}/purchase-state/.

    Annotations the server declares

    • title: List a customer's subscriptions
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_list_customersList Smartrr customers (subscribers) with email, name, phone, order count, total spent and custom attributes.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "smartrr_list_customers" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "email": it reads mail.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
    Description, as the server wrote it
    List Smartrr customers (subscribers) with email, name, phone, order count, total spent and custom attributes. Search by email fragment or filter by Shopify customer id. GET /vendor/customer-relationship.

    Annotations the server declares

    • title: List customers
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_list_ordersList orders Smartrr has synced from Shopify (subscription and one-time) with totals, status, financial and fulfillment status, tracking, items and customer.Reads text others writeNo findings

    Why it is in this group

    • The name "smartrr_list_orders" says "list": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    List orders Smartrr has synced from Shopify (subscription and one-time) with totals, status, financial and fulfillment status, tracking, items and customer. Filter by processed date or order label (e.g. #1001). GET /vendor/order.

    Annotations the server declares

    • title: List orders
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true
  • smartrr_list_subscriptionsList customer subscriptions (Smartrr 'purchase states') with status, next billing date, selling plan, line items, shipping address, discounts and the customer (id, email, name).Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "smartrr_list_subscriptions" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "email": it reads mail.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
    Description, as the server wrote it
    List customer subscriptions (Smartrr 'purchase states') with status, next billing date, selling plan, line items, shipping address, discounts and the customer (id, email, name). Filter by status, next billing date or creation date. The ids you need for the other tools: `id` (subscription id), `custRel.id` (customer id) and `shopifyId` (Shopify subscription id). GET /vendor/purchase-state.

    Annotations the server declares

    • title: List subscriptions
    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data2
Reads files, mail, messages, databases, secrets, calendars or repositories.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "smartrr_list_selling_plan_groups" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "smartrr_list_selling_plan_groups" says "list": a word for reading.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http smartrr https://smartrr.usefulapi.io/mcp
claude mcp add --transport http smartrr https://smartrr.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__smartrr__smartrr_list_subscriptions",
      "mcp__smartrr__smartrr_get_subscription",
      "mcp__smartrr__smartrr_list_customer_subscriptions",
      "mcp__smartrr__smartrr_get_subscription_events",
      "mcp__smartrr__smartrr_get_subscription_orders",
      "mcp__smartrr__smartrr_get_subscription_bills",
      "mcp__smartrr__smartrr_list_customers",
      "mcp__smartrr__smartrr_list_orders",
      "mcp__smartrr__smartrr_get_order",
      "mcp__smartrr__smartrr_list_bills",
      "mcp__smartrr__smartrr_get_bill_history",
      "mcp__smartrr__smartrr_list_cancellation_reasons",
      "mcp__smartrr__smartrr_get_analytics"
    ],
    "ask": [
      "mcp__smartrr__smartrr_list_selling_plan_groups",
      "mcp__smartrr__smartrr_pause_subscription",
      "mcp__smartrr__smartrr_resume_subscription",
      "mcp__smartrr__smartrr_skip_order",
      "mcp__smartrr__smartrr_unskip_order",
      "mcp__smartrr__smartrr_set_next_billing_date"
    ],
    "deny": [
      "mcp__smartrr__smartrr_cancel_customer_subscription",
      "mcp__smartrr__smartrr_retry_bill"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as smartrr. Review it before you use it.

Capability tags behind 21 rules
  • mcp__smartrr__smartrr_list_subscriptions private-data, untrusted-input
  • mcp__smartrr__smartrr_get_subscription untrusted-input
  • mcp__smartrr__smartrr_list_customer_subscriptions untrusted-input
  • mcp__smartrr__smartrr_get_subscription_events untrusted-input
  • mcp__smartrr__smartrr_get_subscription_orders untrusted-input
  • mcp__smartrr__smartrr_get_subscription_bills untrusted-input
  • mcp__smartrr__smartrr_list_customers private-data, untrusted-input
  • mcp__smartrr__smartrr_list_orders untrusted-input
  • mcp__smartrr__smartrr_get_order untrusted-input
  • mcp__smartrr__smartrr_list_bills untrusted-input
  • mcp__smartrr__smartrr_get_bill_history untrusted-input
  • mcp__smartrr__smartrr_list_selling_plan_groups untrusted-input
  • mcp__smartrr__smartrr_list_cancellation_reasons untrusted-input
  • mcp__smartrr__smartrr_get_analytics untrusted-input
  • mcp__smartrr__smartrr_pause_subscription untrusted-input
  • mcp__smartrr__smartrr_resume_subscription untrusted-input
  • mcp__smartrr__smartrr_cancel_customer_subscription untrusted-input
  • mcp__smartrr__smartrr_skip_order untrusted-input
  • mcp__smartrr__smartrr_unskip_order untrusted-input
  • mcp__smartrr__smartrr_set_next_billing_date untrusted-input
  • mcp__smartrr__smartrr_retry_bill untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.usefulapi/smartrr/verify?hash=7cb72a1787f275c2f5225060ef2797dbe8f8d59d934dc84bdf6ad96dee2240e2" | jq -e '.changed == false'

Pinned hash 7cb72a1787f2, from Oct 24, 2026, 13:19 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.usefulapi/smartrr/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.usefulapi/smartrr
[![anlyon.dev](https://anlyon.dev/badge/io.usefulapi/smartrr.svg)](https://anlyon.dev/servers/io.usefulapi/smartrr)

Source: MCP Registry · repository. Synced Oct 24, 2026, 13:18 UTC.