Cratejoy MCP by usefulapi
Read Cratejoy subscriptions, customers, orders and shipments; skip or cancel subscriptions.
使うべきか
品質と安全性
検出事項(5)
- LOWcratejoy_list_subscription_coupons 内
- LOWcratejoy_skip_subscription_renewal 内
- LOWcratejoy_cancel_customer_subscription 内
- LOWcratejoy_reactivate_subscription 内
- LOWcratejoy_retry_subscription_renewal 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"cratejoy": {
"url": "https://cratejoy.usefulapi.io/mcp"
}
}
}リモートエンドポイント
https://cratejoy.usefulapi.io/mcpstreamable-httpできること
ツール一覧
ツール(18)
🟢cratejoy_get_store_metadata
The store-level metadata record (id, store_id, created_at, updated_at, data: free-form JSON attached to the store). GET /v1/metadata/.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_customers(email, name, filters, with, limit, ...)
List customers (id, name, email, country, location, num_orders, num_subscriptions, subscription_status, total_revenue). Filter by email or name, or with `filters` (e.g. { 'addresses.city': 'Austin' }). Relationships: addresses, logs, carts, notes, orders, shipments, subscriptions. GET /v1/customers/.
入力スキーマ
{
"type": "object",
"properties": {
"email": {
"description": "Exact customer email.",
"type": "string",
"minLength": 3,
"maxLength": 200
},
"name": {
"description": "Customer name contains this text (case-insensitive).",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"filters": {
"description": "Extra Cratejoy filters as { '[relation.]property[__comparison]': value }. Comparisons: eq (default), ne, lt, le, gt, ge, like, ilike (% is the wildcard), in, nin (comma-separated), is_null. Status columns take integers. Example: { 'customer.email__like': '%@example.com' }.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_get_customer(customer_id, with)
One customer by id, optionally with relationships (addresses, subscriptions, orders, shipments, notes...). GET /v1/customers/{customer_id}/.
入力スキーマ
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy customer id."
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_subscriptions(status, ends_after, ends_before, filters, with, ...)
List subscriptions (id, status, autorenew, billing_name, start_date, end_date, skipped_date, is_test, product_billing_id). Filter by status and end-date range, or with `filters` (e.g. { 'customer.email__like': '%@example.com' }). Relationships: customer, billing, term, product, address, orders, shipments, logs. GET /v1/subscriptions/.
入力スキーマ
{
"type": "object",
"properties": {
"status": {
"description": "Subscription status (unpaid, suspended and others are deprecated by Cratejoy).",
"type": "string",
"enum": [
"unpaid",
"active",
"cancelled",
"suspended",
"expired",
"past_due",
"pending_renewal",
"renewing",
"unpaid_order_failed",
"transferred"
]
},
"ends_after": {
"description": "Only subscriptions whose end_date is on or after this date/date-time.",
"type": "string"
},
"ends_before": {
"description": "Only subscriptions whose end_date is on or before this date/date-time.",
"type": "string"
},
"filters": {
"description": "Extra Cratejoy filters as { '[relation.]property[__comparison]': value }. Comparisons: eq (default), ne, lt, le, gt, ge, like, ilike (% is the wildcard), in, nin (comma-separated), is_null. Status columns take integers. Example: { 'customer.email__like': '%@example.com' }.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_get_subscription(subscription_id, with)
One subscription by id, optionally with relationships (customer, billing, term, product, address, orders, shipments, logs). GET /v1/subscriptions/{sub_id}/.
入力スキーマ
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy subscription id."
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_subscription_coupons(subscription_id, limit, page)
Coupons applied to a subscription's next renewal (coupon_id, code_used, enabled, num_renewals). GET /v1/subscriptions/{sub_id}/coupons/.
入力スキーマ
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy subscription id."
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"required": [
"subscription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_orders(financial_status, placed_after, placed_before, filters, with, ...)
List orders (id, customer_id, placed_at, status, financial_status, fulfillment_status, is_renewal, is_gift, sub_total, total, total_shipping, total_tax). Amounts are in cents. Filter by payment status and placed-at range, or with `filters`. Relationships: customer, products, coupons, bill_address, ship_address, fulfillments, transactions, subscriptions. GET /v1/orders/.
入力スキーマ
{
"type": "object",
"properties": {
"financial_status": {
"description": "Payment status of the order.",
"type": "string",
"enum": [
"pending",
"authorized",
"partially_paid",
"paid",
"partially_refunded",
"refunded",
"voided"
]
},
"placed_after": {
"description": "Only orders placed on or after this date/date-time.",
"type": "string"
},
"placed_before": {
"description": "Only orders placed on or before this date/date-time.",
"type": "string"
},
"filters": {
"description": "Extra Cratejoy filters as { '[relation.]property[__comparison]': value }. Comparisons: eq (default), ne, lt, le, gt, ge, like, ilike (% is the wildcard), in, nin (comma-separated), is_null. Status columns take integers. Example: { 'customer.email__like': '%@example.com' }.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_get_order(order_id, with)
One order by id, optionally with relationships (customer, products, coupons, addresses, fulfillments, transactions). GET /v1/orders/{order_id}/.
入力スキーマ
{
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy order id."
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_shipments(status, created_after, created_before, filters, with, ...)
List shipments (id, customer_id, status, created_at, target_at, shipped_at, tracking_number, is_gift). Filter by status and creation range, or with `filters`. Relationships: customer, fulfillments, labels, ship_address, subscriptions. GET /v1/shipments/.
入力スキーマ
{
"type": "object",
"properties": {
"status": {
"description": "Shipment status.",
"type": "string",
"enum": [
"unshipped",
"shipped",
"cancelled"
]
},
"created_after": {
"description": "Only shipments created on or after this date/date-time.",
"type": "string"
},
"created_before": {
"description": "Only shipments created on or before this date/date-time.",
"type": "string"
},
"filters": {
"description": "Extra Cratejoy filters as { '[relation.]property[__comparison]': value }. Comparisons: eq (default), ne, lt, le, gt, ge, like, ilike (% is the wildcard), in, nin (comma-separated), is_null. Status columns take integers. Example: { 'customer.email__like': '%@example.com' }.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_get_shipment(shipment_id, with)
One shipment by id, optionally with relationships (customer, fulfillments, labels, ship_address, subscriptions). GET /v1/shipments/{ship_id}/.
入力スキーマ
{
"type": "object",
"properties": {
"shipment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy shipment id."
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
}
},
"required": [
"shipment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_products(product_type, filters, with, limit, page)
List products (id, name, sku, slug, description, visible, listed, giftable, ship_option, ship_weight, has_subscribers). Filter by type or with `filters` (e.g. { 'visible': true }). Relationships: billing, instances, variants, subscription_types. GET /v1/products/.
入力スキーマ
{
"type": "object",
"properties": {
"product_type": {
"description": "Product type.",
"type": "string",
"enum": [
"subscription",
"one_time",
"gift_card"
]
},
"filters": {
"description": "Extra Cratejoy filters as { '[relation.]property[__comparison]': value }. Comparisons: eq (default), ne, lt, le, gt, ge, like, ilike (% is the wildcard), in, nin (comma-separated), is_null. Status columns take integers. Example: { 'customer.email__like': '%@example.com' }.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_get_product(product_id, with)
One product by id, optionally with relationships. GET /v1/products/{prod_id}/.
入力スキーマ
{
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy product id."
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
}
},
"required": [
"product_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_list_transactions(result, created_after, created_before, filters, with, ...)
List payment transactions (id, created_at, result: authorized/captured/failed/refunded, total in cents, is_test, order). Filter by result and creation range, or with `filters`. GET /v1/transactions/.
入力スキーマ
{
"type": "object",
"properties": {
"result": {
"description": "Transaction result.",
"type": "string",
"enum": [
"authorized",
"captured",
"failed",
"refunded",
"failed_refund"
]
},
"created_after": {
"description": "Only transactions created on or after this date/date-time.",
"type": "string"
},
"created_before": {
"description": "Only transactions created on or before this date/date-time.",
"type": "string"
},
"filters": {
"description": "Extra Cratejoy filters as { '[relation.]property[__comparison]': value }. Comparisons: eq (default), ne, lt, le, gt, ge, like, ilike (% is the wildcard), in, nin (comma-separated), is_null. Status columns take integers. Example: { 'customer.email__like': '%@example.com' }.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"page": {
"description": "Page number, counting from 0 (default 0). Pass the previous reply's next_page.",
"type": "integer",
"minimum": 0,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢cratejoy_get_transaction(transaction_id, with)
One payment transaction by id. GET /v1/transactions/{trans_id}/.
入力スキーマ
{
"type": "object",
"properties": {
"transaction_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy transaction id."
},
"with": {
"description": "Relationships to embed: comma-separated names (e.g. 'customer,orders'), 'all', or an empty string for none. Omit it for the vendor default.",
"type": "string",
"pattern": "^(?:all|[a-z_]+(?:,[a-z_]+)*)?$"
}
},
"required": [
"transaction_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴cratejoy_skip_subscription_renewal(subscription_id, action, confirm)
WRITE: skip a subscriber's next renewal (action 'skip') or undo the skip (action 'unskip'). Requires confirm=true. Repeating the same action changes nothing more. This changes a merchant customer's subscription in Cratejoy; it is not this server's own billing. PUT /v1/subscriptions/{sub_id}/skip/.
入力スキーマ
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy subscription id."
},
"action": {
"type": "string",
"enum": [
"skip",
"unskip"
],
"description": "'skip' skips the next renewal; 'unskip' restores it."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: confirms the customer's renewal schedule should change."
}
},
"required": [
"subscription_id",
"action",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴cratejoy_cancel_customer_subscription(subscription_id, confirm, log_note)
WRITE: cancel a subscriber's subscription in Cratejoy (the customer stops receiving boxes and renewals). This cancels the merchant's customer subscription, NOT this server's Pro plan (use the *_cancel_subscription tool for that). Requires confirm=true. A cancelled subscription can be restored with cratejoy_reactivate_subscription. PUT /v1/subscriptions/{sub_id}/cancel/.
入力スキーマ
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy subscription id."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: confirms the customer's subscription should be cancelled."
},
"log_note": {
"description": "Optional note recorded in the subscription's log.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"subscription_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴cratejoy_reactivate_subscription(subscription_id, confirm, log_note)
WRITE: reactivate a cancelled subscription so it renews and charges the customer again. Requires confirm=true. Reactivating an active subscription changes nothing more. PUT /v1/subscriptions/{sub_id}/reactivate/.
入力スキーマ
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy subscription id."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: confirms the subscription should renew (and be charged) again."
},
"log_note": {
"description": "Optional note recorded in the subscription's log.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"subscription_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴cratejoy_retry_subscription_renewal(subscription_id, confirm, log_note)
WRITE: retry the renewal of a PAST-DUE subscription whose renewal failed within the last 30 days. This charges the customer's saved payment method. Requires confirm=true. PUT /v1/subscriptions/{sub_id}/renew/.
入力スキーマ
{
"type": "object",
"properties": {
"subscription_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Cratejoy subscription id (status past_due)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: confirms the customer's payment method should be charged."
},
"log_note": {
"description": "Optional note recorded in the subscription's log.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"subscription_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}コミュニティ
エビデンス