Skip to main content
Glama

Read stream subscription

get_stream_subscription
Read-onlyIdempotent

Read the signed-in user’s direct paid subscription status for a stream, including price and scheduled cancellation. A null subscription does not rule out access through a package or organization; use get_stream_package_subscription for packages. Subscribing, changing or cancelling happens in the Synoptic app.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
streamIdYesID of a stream you can view, for example from search, streams_all or streams_following.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
subscriptionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / subscription / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "active": {
      -        "description": "True while status is active or trialing.",
      -        "type": "boolean"
      -      },
      -      "cancelAt": {
      -        "description": "ISO 8601 time the subscription is scheduled to end, or null when no cancellation is scheduled.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "currency": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "customTargets": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Number of custom targets the subscription allows, or null when it sets no allowance."
      -      },
      -      "interval": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "intervalCount": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "price": {
      -        "description": "Price in the currency’s smallest unit.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "signupTrial": {
      -        "description": "True for a trial started at Synoptic sign-up.",
      -        "type": "boolean"
      -      },
      -      "status": {
      -        "description": "Stripe subscription status, such as active, trialing, past_due or canceled.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "active",
      -      "status",
      -      "interval",
      -      "intervalCount",
      -      "price",
      -      "currency",
      -      "cancelAt",
      -      "customTargets",
      -      "signupTrial"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "active": {
      +        "description": "True while status is active or trialing.",
      +        "type": "boolean"
      +      },
      +      "cancelAt": {
      +        "description": "ISO 8601 time the subscription is scheduled to end, or null when no cancellation is scheduled.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "currency": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "customTargets": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Number of custom targets the subscription allows, or null when the subscription records none; set_stream_custom_targets and patch_stream_custom_targets then accept no targets."
      +      },
      +      "interval": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "intervalCount": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "price": {
      +        "description": "Price in the currency’s smallest unit.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "signupTrial": {
      +        "description": "True for a trial started at Synoptic sign-up.",
      +        "type": "boolean"
      +      },
      +      "status": {
      +        "description": "Stripe subscription status, such as active, trialing, past_due or canceled.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "active",
      +      "status",
      +      "interval",
      +      "intervalCount",
      +      "price",
      +      "currency",
      +      "cancelAt",
      +      "customTargets",
      +      "signupTrial"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed2 schema fields changed
    • addedInput schema / properties / streamId / description
      Added value: +"ID of a stream you can view, for example from search, streams_all or streams_following."
    • changedOutput schema / properties / subscription / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "active": {
      -        "type": "boolean"
      -      },
      -      "cancelAt": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "currency": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "customTargets": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "interval": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "intervalCount": {
      -        "anyOf": [
      -          {
      -            "type": "integer"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "price": {
      -        "description": "Price in the currency’s smallest unit.",
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "signupTrial": {
      -        "type": "boolean"
      -      },
      -      "status": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "active",
      -      "status",
      -      "interval",
      -      "intervalCount",
      -      "price",
      -      "currency",
      -      "cancelAt",
      -      "customTargets",
      -      "signupTrial"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "active": {
      +        "description": "True while status is active or trialing.",
      +        "type": "boolean"
      +      },
      +      "cancelAt": {
      +        "description": "ISO 8601 time the subscription is scheduled to end, or null when no cancellation is scheduled.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "currency": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "customTargets": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Number of custom targets the subscription allows, or null when it sets no allowance."
      +      },
      +      "interval": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "intervalCount": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "price": {
      +        "description": "Price in the currency’s smallest unit.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "signupTrial": {
      +        "description": "True for a trial started at Synoptic sign-up.",
      +        "type": "boolean"
      +      },
      +      "status": {
      +        "description": "Stripe subscription status, such as active, trialing, past_due or canceled.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "active",
      +      "status",
      +      "interval",
      +      "intervalCount",
      +      "price",
      +      "currency",
      +      "cancelAt",
      +      "customTargets",
      +      "signupTrial"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint, so the safety profile is covered. The description adds genuinely non-obvious behavior: a null subscription does not imply no access (package/org routes exist), and mutations occur out of band in the app. That is useful context beyond structured fields, though return-shape details are left to the output schema.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is read, followed by the null caveat and the alternative/mutation routing. No filler and no repetition of the schema or annotations.

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

Completeness5/5

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

With an output schema present, return formatting need not be restated. The description covers scope, the null-result interpretation, the sibling alternative, and where mutations live, which is everything an agent needs to call this correctly.

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 coverage is 100%, so streamId is fully documented in the schema, including where to obtain the ID (search, streams_all, streams_following). The description adds nothing further about the parameter, which is the expected baseline when the schema carries the field semantics.

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

Purpose5/5

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

States a specific verb (Read) and resource (the signed-in user's direct paid subscription status for a stream), and enumerates the fields returned (price, scheduled cancellation). It explicitly distinguishes itself from the closest sibling, get_stream_package_subscription, so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit routing: use get_stream_package_subscription for package-based access, and states that subscribing/changing/cancelling happens in the Synoptic app, i.e. this tool is not the mutation path. It also tells the agent how to interpret a null result, which is the main usage trap.

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.

Resources