Skip to main content
Glama

byte_subscription_health

Read-onlyIdempotent

Detect publisher content drift by comparing last 7 days of activity against a 23-day baseline. Returns stability: stable, moderate, significant, unknown.

Instructions

Get the content-drift signal for a publisher. Compares their last 7 days of publishing activity (cadence, message count) against their 23-day baseline (days 8-30). Returns 'stable' (steady publishing), 'moderate' (20-50% cadence shift or 24-48h silence), 'significant' (>50% shift or >48h silence), or 'unknown' (new publisher, insufficient baseline). Use this to detect when a publisher you subscribe to has pivoted content or gone dormant.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
publisherYesPublisher address to check
indexerUrlNoOptional indexer URL override

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
signalNoContent-drift bucket for the publisher
publisherNoPublisher address checked
messages7dNoMessages in the last 7 days
messages30dNoMessages in the last 30 days
messages_7dNoMessages in the last 7 days (indexer key)
messages_30dNoMessages in the last 30 days (indexer key)
silence_hoursNoHours since the last message (null if never)
volume_ratio_bpsNo7d/baseline volume ratio (bps)
cadence_drift_bpsNoCadence drift vs 23-day baseline (bps)

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed14 schema fields changedv0.11.13
    • removedOutput schema / properties / cadence_drift_bps / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / cadence_drift_bps / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / messages30d / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages30d / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / messages7d / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages7d / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / messages_30d / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages_30d / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / messages_7d / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages_7d / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / silence_hours / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / silence_hours / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / volume_ratio_bps / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / volume_ratio_bps / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  2. Changed12 schema fields changedv0.10.7
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
    • addedOutput schema / properties / cadence_drift_bps
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Cadence drift vs 23-day baseline (bps)"
      +}
    • removedOutput schema / properties / details
      Removed value: -{
      -  "description": "Underlying counts, cadence ratios, and last-message timestamp"
      -}
    • addedOutput schema / properties / messages30d
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Messages in the last 30 days"
      +}
    • addedOutput schema / properties / messages7d
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Messages in the last 7 days"
      +}
    • addedOutput schema / properties / messages_30d
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Messages in the last 30 days (indexer key)"
      +}
    • addedOutput schema / properties / messages_7d
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Messages in the last 7 days (indexer key)"
      +}
    • addedOutput schema / properties / publisher
      Added value: +{
      +  "description": "Publisher address checked",
      +  "type": "string"
      +}
    • addedOutput schema / properties / signal
      Added value: +{
      +  "description": "Content-drift bucket for the publisher",
      +  "enum": [
      +    "stable",
      +    "moderate",
      +    "significant",
      +    "unknown"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / silence_hours
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Hours since the last message (null if never)"
      +}
    • removedOutput schema / properties / status
      Removed value: -{
      -  "description": "Content-drift bucket for the publisher",
      -  "enum": [
      -    "stable",
      -    "moderate",
      -    "significant",
      -    "unknown"
      -  ],
      -  "type": "string"
      -}
    • addedOutput schema / properties / volume_ratio_bps
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "7d/baseline volume ratio (bps)"
      +}
  3. Addedv0.10.5

TDQS

A4.5/5.0
Behavior5/5

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

Goes beyond the readOnly/idempotent annotations by explaining the exact comparison windows (7 days vs 23-day baseline), the thresholds for each return value, and the edge case 'unknown' for new publishers. No contradictions with annotations; the description and annotations agree this is a read-only, idempotent operation.

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 sentences: one for purpose, one for algorithm and returns, one for usage. Every sentence carries necessary information and there is no redundancy. The most distinguishing content (signal categories and thresholds) is compactly and clearly presented.

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 for return values, the description still adds the algorithmic context, threshold meanings, and intended use-case. It covers the edge cases (new publisher, insufficient baseline) and enough operational detail that an agent can select and invoke the tool correctly without further clarification.

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%: publisher and indexerUrl already have clear descriptions in the schema. The description adds only contextual flavor ('a publisher you subscribe to') without introducing new parameter meaning, syntax, or format details, so baseline 3 applies.

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 and resource: 'Get the content-drift signal for a publisher.' It further distinguishes itself from siblings by describing a unique comparison of recent activity against a baseline and enumerating the exact signal categories. The use case ('detect when a publisher you subscribe to has pivoted content or gone dormant') makes the tool's role in the sibling set unmistakable.

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

Usage Guidelines4/5

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

Provides clear context with 'Use this to detect when a publisher you subscribe to has pivoted content or gone dormant.' It does not explicitly name sibling alternatives or state when not to use it, such as versus byte_check_subscription for plain subscription status, so it stops short of full exclusionary routing.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/0rkz/byte-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server