Skip to main content
Glama

Read subscriptions

subscriptions_read
Read-onlyIdempotent

Reads tariff plans, subscriptions, subscribers, access checks and payments of the Subscriptions module on the active site.

Input Schema

NameRequiredDescriptionDefault
pNoList page, the earlier name of page; page wins when both are set.
idNoLegacy tariff id.
pageNoList page, from 1.
queryNoSearch query for subscribers/payments lists.
actionYesOperation to run. Each oneOf entry describes one action and lists its parameters.
detailNoRecord form of a paged list. brief (default): id, status, plan, user id and email, dates (UTC, ISO 8601); payments also the amount. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.
offsetNoRecords to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.
statusNoStatus filter (comma-separated).
date_toNoPayment date upper bound (unix).
plan_idNoTariff plan id.
user_idNoUser id.
per_pageNoRecords per page: 1-50, 20 by default, larger values count as 50.
date_fromNoPayment date lower bound (unix).
payment_idNoPayment id.
expires_beforeNoUnix timestamp filter.
subscription_idNoSubscription id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / action / oneOf
      Previous value: -[
      -  {
      -    "const": "plans_list",
      -    "description": "Lists tariff plans. Optional: offset."
      -  },
      -  {
      -    "const": "plan_get",
      -    "description": "Returns one tariff plan. Required: plan_id."
      -  },
      -  {
      -    "const": "plan_stats",
      -    "description": "Returns statistics of a tariff plan. Required: plan_id."
      -  },
      -  {
      -    "const": "plan_users",
      -    "description": "Lists the users of a tariff plan a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: plan_id. Optional: page, p, per_page, offset, detail, status, expires_before."
      -  },
      -  {
      -    "const": "legacy_items_list",
      -    "description": "Lists legacy tariffs. Optional: offset."
      -  },
      -  {
      -    "const": "legacy_item_get",
      -    "description": "Returns one legacy tariff (id in id or plan_id). Optional: id, plan_id."
      -  },
      -  {
      -    "const": "user_subscriptions",
      -    "description": "Lists the subscriptions of a user a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: user_id. Optional: page, p, per_page, offset, detail, status, expires_before."
      -  },
      -  {
      -    "const": "subscription_get",
      -    "description": "Returns one subscription. Required: subscription_id."
      -  },
      -  {
      -    "const": "access_check",
      -    "description": "Checks whether a user has access through a plan. Optional: user_id, plan_id."
      -  },
      -  {
      -    "const": "subscribers_list",
      -    "description": "Lists subscribers, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, plan_id, status, expires_before."
      -  },
      -  {
      -    "const": "payments_list",
      -    "description": "Lists payments, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, user_id, subscription_id, plan_id, status, date_from, date_to."
      -  },
      -  {
      -    "const": "payment_get",
      -    "description": "Returns one payment. Required: payment_id."
      -  }
      -]New value: +[
      +  {
      +    "const": "plans_list",
      +    "description": "Lists tariff plans. Optional: offset."
      +  },
      +  {
      +    "const": "plan_get",
      +    "description": "Returns one tariff plan. Required: plan_id."
      +  },
      +  {
      +    "const": "plan_stats",
      +    "description": "Returns statistics of a tariff plan. Required: plan_id."
      +  },
      +  {
      +    "const": "plan_users",
      +    "description": "Lists the users of a tariff plan a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: plan_id. Optional: page, p, per_page, offset, detail, status, expires_before."
      +  },
      +  {
      +    "const": "legacy_items_list",
      +    "description": "Lists legacy tariffs. Optional: offset."
      +  },
      +  {
      +    "const": "legacy_item_get",
      +    "description": "Returns one legacy tariff (id in id or plan_id). Required: id or plan_id."
      +  },
      +  {
      +    "const": "user_subscriptions",
      +    "description": "Lists the subscriptions of a user a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: user_id. Optional: page, p, per_page, offset, detail, status, expires_before."
      +  },
      +  {
      +    "const": "subscription_get",
      +    "description": "Returns one subscription. Required: subscription_id."
      +  },
      +  {
      +    "const": "access_check",
      +    "description": "Checks whether a user has access through a plan. Required: user_id, plan_id."
      +  },
      +  {
      +    "const": "subscribers_list",
      +    "description": "Lists subscribers, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, plan_id, status, expires_before."
      +  },
      +  {
      +    "const": "payments_list",
      +    "description": "Lists payments, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, user_id, subscription_id, plan_id, status, date_from, date_to."
      +  },
      +  {
      +    "const": "payment_get",
      +    "description": "Returns one payment. Required: payment_id."
      +  }
      +]
  2. Changed6 schema fields changed
    • changedInput schema / properties / action / oneOf
      Previous value: -[
      -  {
      -    "const": "plans_list",
      -    "description": "Lists tariff plans."
      -  },
      -  {
      -    "const": "plan_get",
      -    "description": "Returns one tariff plan. Required: plan_id."
      -  },
      -  {
      -    "const": "plan_stats",
      -    "description": "Returns statistics of a tariff plan. Required: plan_id."
      -  },
      -  {
      -    "const": "plan_users",
      -    "description": "Lists the users of a tariff plan. Required: plan_id. Optional: p, page, status, expires_before."
      -  },
      -  {
      -    "const": "legacy_items_list",
      -    "description": "Lists legacy tariffs."
      -  },
      -  {
      -    "const": "legacy_item_get",
      -    "description": "Returns one legacy tariff (id in id or plan_id). Optional: id, plan_id."
      -  },
      -  {
      -    "const": "user_subscriptions",
      -    "description": "Lists the subscriptions of a user. Required: user_id. Optional: p, page, status, expires_before."
      -  },
      -  {
      -    "const": "subscription_get",
      -    "description": "Returns one subscription. Required: subscription_id."
      -  },
      -  {
      -    "const": "access_check",
      -    "description": "Checks whether a user has access through a plan. Optional: user_id, plan_id."
      -  },
      -  {
      -    "const": "subscribers_list",
      -    "description": "Lists subscribers, optionally filtered. Optional: p, page, query, plan_id, status, expires_before."
      -  },
      -  {
      -    "const": "payments_list",
      -    "description": "Lists payments, optionally filtered. Optional: p, page, query, user_id, subscription_id, plan_id, status, date_from, date_to."
      -  },
      -  {
      -    "const": "payment_get",
      -    "description": "Returns one payment. Required: payment_id."
      -  }
      -]New value: +[
      +  {
      +    "const": "plans_list",
      +    "description": "Lists tariff plans. Optional: offset."
      +  },
      +  {
      +    "const": "plan_get",
      +    "description": "Returns one tariff plan. Required: plan_id."
      +  },
      +  {
      +    "const": "plan_stats",
      +    "description": "Returns statistics of a tariff plan. Required: plan_id."
      +  },
      +  {
      +    "const": "plan_users",
      +    "description": "Lists the users of a tariff plan a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: plan_id. Optional: page, p, per_page, offset, detail, status, expires_before."
      +  },
      +  {
      +    "const": "legacy_items_list",
      +    "description": "Lists legacy tariffs. Optional: offset."
      +  },
      +  {
      +    "const": "legacy_item_get",
      +    "description": "Returns one legacy tariff (id in id or plan_id). Optional: id, plan_id."
      +  },
      +  {
      +    "const": "user_subscriptions",
      +    "description": "Lists the subscriptions of a user a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Required: user_id. Optional: page, p, per_page, offset, detail, status, expires_before."
      +  },
      +  {
      +    "const": "subscription_get",
      +    "description": "Returns one subscription. Required: subscription_id."
      +  },
      +  {
      +    "const": "access_check",
      +    "description": "Checks whether a user has access through a plan. Optional: user_id, plan_id."
      +  },
      +  {
      +    "const": "subscribers_list",
      +    "description": "Lists subscribers, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, plan_id, status, expires_before."
      +  },
      +  {
      +    "const": "payments_list",
      +    "description": "Lists payments, optionally filtered, a page at a time. Brief records by default; detail=full gives complete records. The reply has page, per_page, total, has_more, truncated and next. Optional: page, p, per_page, offset, detail, query, user_id, subscription_id, plan_id, status, date_from, date_to."
      +  },
      +  {
      +    "const": "payment_get",
      +    "description": "Returns one payment. Required: payment_id."
      +  }
      +]
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "Record form of a paged list. brief (default): id, status, plan, user id and email, dates (UTC, ISO 8601); payments also the amount. Titles and excerpts are plain text; names, logins, paths, URLs and other identifiers are as the source gives them. full: complete records. A list reply is at most 30 KB and holds every record of its page: a record that does not fit in full comes in brief form, marked detail brief, the reply counts such records in brief_records, and get by id returns the complete record; brief records shorten their excerpts, then keep only their ids and titles. Only a page that does not fit even so is cut: truncated is true and next names the offset to go on from.",
      +  "enum": [
      +    "brief",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Records to skip from the start of a list; overrides page. A list reply cut at its size limit names the offset that follows in next.",
      +  "type": "number"
      +}
    • changedInput schema / properties / p / description
      Previous value: -"Page number."New value: +"List page, the earlier name of page; page wins when both are set."
    • changedInput schema / properties / page / description
      Previous value: -"Synonym for p on list actions."New value: +"List page, from 1."
    • addedInput schema / properties / per_page
      Added value: +{
      +  "description": "Records per page: 1-50, 20 by default, larger values count as 50.",
      +  "type": "number"
      +}
  3. Added

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description's only added context is site-scoped execution, which is genuinely useful. Rate limits, permission requirements and the 30 KB reply cap are left entirely to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with the resource list immediately after the verb; nothing is wasted or padded. It is arguably too terse for a 12-action tool, but the dimension is about avoiding bloat and this is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-action paginated tool with no output schema, the description should at least signal the action-multiplexing pattern and that paged list replies can be truncated. The exceptionally rich schema and enum descriptions compensate for most of that gap, so this is adequate rather than deficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the `action` enum carries per-operation descriptions listing required and optional parameters, so the schema is doing all the work. The description contributes nothing about the 16 parameters. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Reads") plus the concrete resources covered: tariff plans, subscriptions, subscribers, access checks and payments, scoped to the Subscriptions module on the active site. That is enough to distinguish it from subscriptions_write/subscriptions_delete. It stops short of saying this is a single multiplexed entry point whose behavior is selected by the `action` enum, which is the tool's defining shape.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to pick this tool over siblings, no prerequisite about the active site needing to be selected first, and no note that write operations belong to subscriptions_write. The only usage-adjacent phrase is "on the active site," which implies scope but gives no instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.