Skip to main content
Glama

HubVibe: Pay-per-Call Agent Tools: Web Search, Email Verify, KYC Screening, Stocks, Crypto, News

Mastodon hashtag timeline, account, search or trends, live

hubvibe_social_mastodon
Read-onlyIdempotent

Mastodon data, live and keyless (any public instance): a hashtag timeline, an account with its latest posts, account or hashtag search, or trending hashtags, each post with text, counts, media and tags. Use it for social listening and trend tracking in the fediverse. Input: mode (hashtag, account, search, trends) with tag, acct or query; optional instance, limit. $0.05 per call. Returns: mode, instance, tag, acct, query, kind, account{}, statuses[], accounts[], hashtags[], status_count, source, as_of, checked_at.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tagNoHashtag without #; hashtag mode.
acctNoUsername, optionally @domain (Gargron or Gargron@mastodon.social); account mode.
kindNoWhat to search for, default accounts.
modeYeshashtag: latest statuses under a tag; account: an account and its statuses; search: accounts or hashtags matching a query; trends: trending hashtags.
limitNoItems to return (hashtag up to 40, search up to 25, trends up to 20), default 10.
queryNoSearch words; search mode.
instanceNoMastodon server hostname, default mastodon.social.
languageNoOptional BCP-47 language tag (en, ja, ko, pt-BR): the human-readable strings of the result (notes, details, reasons) are translated into this language; data, codes, numbers and URLs are untouched. Default: as produced.
statusesNoLatest statuses to return in account mode, default 10.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
statusYes
workerYes
price_usdYes
provenanceYes
receipt_idYes
attributionNo
receipt_urlYes
billing_warningNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed23 schema fields changed
    • removedOutput schema / description
      Removed value: -"The 200 body of every paid /work call. `result` is the worker's own output (its schema is per route); everything else is the same on every /work route. A receipt for the job is at `receipt_url`."
    • removedOutput schema / properties / attribution / description
      Removed value: -"Present only when the result's text was machine-translated: the credit to show with it."
    • removedOutput schema / properties / attribution / items / description
      Removed value: -"A credit."
    • removedOutput schema / properties / attribution / items / properties
      Removed value: -{
      -  "text": {
      -    "description": "Credit.",
      -    "examples": [
      -      "Translated by Google"
      -    ],
      -    "type": "string"
      -  },
      -  "url": {
      -    "description": "Link.",
      -    "examples": [
      -      "https://translate.google.com"
      -    ],
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / attribution / items / required
      Removed value: -[
      -  "text",
      -  "url"
      -]
    • removedOutput schema / properties / attribution / items / type
      Removed value: -"object"
    • removedOutput schema / properties / billing_warning / description
      Removed value: -"Present only when the charge was recorded with a caveat."
    • removedOutput schema / properties / billing_warning / examples
      Removed value: -[
      -  "settlement pending"
      -]
    • removedOutput schema / properties / price_usd / description
      Removed value: -"What this call cost, in USD."
    • removedOutput schema / properties / price_usd / examples
      Removed value: -[
      -  0.02
      -]
    • removedOutput schema / properties / provenance / description
      Removed value: -"How the result was produced: which providers ran and how long each took."
    • removedOutput schema / properties / provenance / properties
      Removed value: -{
      -  "attempts": {
      -    "description": "Provider attempts made, including retries and failovers.",
      -    "examples": [
      -      1
      -    ],
      -    "type": "integer"
      -  },
      -  "elapsed_ms": {
      -    "description": "Wall-clock milliseconds for the whole job.",
      -    "examples": [
      -      340
      -    ],
      -    "type": "integer"
      -  },
      -  "providers_used": {
      -    "description": "Providers that served the job.",
      -    "examples": [
      -      [
      -        "coinbase-advanced-trade-public"
      -      ]
      -    ],
      -    "items": {
      -      "description": "Provider name.",
      -      "examples": [
      -        "coinbase-advanced-trade-public"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "steps": {
      -    "description": "Every step the job ran, in order.",
      -    "items": {
      -      "description": "One step of the job.",
      -      "properties": {
      -        "ms": {
      -          "description": "Milliseconds the step took.",
      -          "examples": [
      -            312
      -          ],
      -          "type": "integer"
      -        },
      -        "ok": {
      -          "description": "Whether the step succeeded.",
      -          "examples": [
      -            true
      -          ],
      -          "type": "boolean"
      -        },
      -        "provider": {
      -          "description": "Provider that served the step.",
      -          "examples": [
      -            "coinbase-advanced-trade-public"
      -          ],
      -          "type": "string"
      -        },
      -        "reason": {
      -          "description": "Failure reason, on a failed step.",
      -          "examples": [
      -            "provider_timeout"
      -          ],
      -          "type": "string"
      -        },
      -        "step": {
      -          "description": "Step name inside the worker.",
      -          "examples": [
      -            "quote"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "step",
      -        "ok",
      -        "ms"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  }
      -}
    • removedOutput schema / properties / provenance / required
      Removed value: -[
      -  "steps",
      -  "providers_used",
      -  "attempts",
      -  "elapsed_ms"
      -]
    • removedOutput schema / properties / receipt_id / description
      Removed value: -"Receipt id for this job."
    • removedOutput schema / properties / receipt_id / examples
      Removed value: -[
      -  "rcpt_9f1c2b3a4d5e6f70"
      -]
    • removedOutput schema / properties / receipt_url / description
      Removed value: -"Where to fetch the machine-readable receipt (free, no payment)."
    • removedOutput schema / properties / receipt_url / examples
      Removed value: -[
      -  "/work/receipts/rcpt_9f1c2b3a4d5e6f70"
      -]
    • removedOutput schema / properties / result / properties
      Removed value: -{
      -  "account": {
      -    "description": "The account, in account mode; null otherwise.",
      -    "properties": {
      -      "acct": {
      -        "description": "acct (username or username@domain).",
      -        "examples": [
      -          "Gargron"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "avatar_url": {
      -        "description": "Avatar URL.",
      -        "examples": [
      -          "https://files.mastodon.social/accounts/avatars/x.png"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "bio": {
      -        "description": "Bio as plain text.",
      -        "examples": [
      -          "Founder of Mastodon"
      -        ],
      -        "type": "string"
      -      },
      -      "bot": {
      -        "description": "Declared as a bot; null when not stated.",
      -        "examples": [
      -          false
      -        ],
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "created_at": {
      -        "description": "Account creation time.",
      -        "examples": [
      -          "2016-03-16T00:00:00.000Z"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "display_name": {
      -        "description": "Display name.",
      -        "examples": [
      -          "Eugen Rochko"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "followers": {
      -        "description": "Followers.",
      -        "examples": [
      -          500000
      -        ],
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "following": {
      -        "description": "Following.",
      -        "examples": [
      -          400
      -        ],
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "id": {
      -        "description": "Account id on the instance.",
      -        "examples": [
      -          "1"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "statuses": {
      -        "description": "Statuses posted.",
      -        "examples": [
      -          75000
      -        ],
      -        "type": [
      -          "integer",
      -          "null"
      -        ]
      -      },
      -      "url": {
      -        "description": "Profile URL.",
      -        "examples": [
      -          "https://mastodon.social/@Gargron"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "username": {
      -        "description": "Username.",
      -        "examples": [
      -          "Gargron"
      -        ],
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "username",
      -      "acct",
      -      "display_name",
      -      "url",
      -      "bio",
      -      "avatar_url",
      -      "followers",
      -      "following",
      -      "statuses",
      -      "created_at",
      -      "bot"
      -    ],
      -    "type": [
      -      "object",
      -      "null"
      -    ]
      -  },
      -  "accounts": {
      -    "description": "Accounts found (search mode, kind accounts); empty otherwise.",
      -    "items": {
      -      "description": "A Mastodon account.",
      -      "properties": {
      -        "acct": {
      -          "description": "acct (username or username@domain).",
      -          "examples": [
      -            "Gargron"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "avatar_url": {
      -          "description": "Avatar URL.",
      -          "examples": [
      -            "https://files.mastodon.social/accounts/avatars/x.png"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "bio": {
      -          "description": "Bio as plain text.",
      -          "examples": [
      -            "Founder of Mastodon"
      -          ],
      -          "type": "string"
      -        },
      -        "bot": {
      -          "description": "Declared as a bot; null when not stated.",
      -          "examples": [
      -            false
      -          ],
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "created_at": {
      -          "description": "Account creation time.",
      -          "examples": [
      -            "2016-03-16T00:00:00.000Z"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "display_name": {
      -          "description": "Display name.",
      -          "examples": [
      -            "Eugen Rochko"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "followers": {
      -          "description": "Followers.",
      -          "examples": [
      -            500000
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "following": {
      -          "description": "Following.",
      -          "examples": [
      -            400
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "id": {
      -          "description": "Account id on the instance.",
      -          "examples": [
      -            "1"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "statuses": {
      -          "description": "Statuses posted.",
      -          "examples": [
      -            75000
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "url": {
      -          "description": "Profile URL.",
      -          "examples": [
      -            "https://mastodon.social/@Gargron"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "username": {
      -          "description": "Username.",
      -          "examples": [
      -            "Gargron"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "id",
      -        "username",
      -        "acct",
      -        "display_name",
      -        "url",
      -        "bio",
      -        "avatar_url",
      -        "followers",
      -        "following",
      -        "statuses",
      -        "created_at",
      -        "bot"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "acct": {
      -    "description": "Account asked for (account mode).",
      -    "examples": [
      -      "Gargron"
      -    ],
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "as_of": {
      -    "description": "Creation time of the newest status returned, else checked_at.",
      -    "examples": [
      -      "2026-09-27T01:00:00.000Z"
      -    ],
      -    "type": "string"
      -  },
      -  "checked_at": {
      -    "description": "When this node read the source (UTC). Nothing here is cached.",
      -    "examples": [
      -      "2026-09-26T18:00:00Z"
      -    ],
      -    "format": "date-time",
      -    "type": "string"
      -  },
      -  "hashtags": {
      -    "description": "Hashtags (search mode, kind hashtags, or trends); empty otherwise.",
      -    "items": {
      -      "description": "A hashtag with its recent activity.",
      -      "properties": {
      -        "accounts_7d": {
      -          "description": "Distinct accounts over that history; null when none.",
      -          "examples": [
      -            90
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "days": {
      -          "description": "Days of history the instance reported.",
      -          "examples": [
      -            7
      -          ],
      -          "type": "integer"
      -        },
      -        "name": {
      -          "description": "Hashtag name.",
      -          "examples": [
      -            "opensource"
      -          ],
      -          "type": "string"
      -        },
      -        "url": {
      -          "description": "Tag URL on the instance.",
      -          "examples": [
      -            "https://mastodon.social/tags/opensource"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "uses_7d": {
      -          "description": "Uses over the history the instance reports (about a week); null when none.",
      -          "examples": [
      -            120
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "name",
      -        "url",
      -        "uses_7d",
      -        "accounts_7d",
      -        "days"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "instance": {
      -    "description": "Instance queried.",
      -    "examples": [
      -      "mastodon.social"
      -    ],
      -    "type": "string"
      -  },
      -  "kind": {
      -    "description": "accounts or hashtags (search mode).",
      -    "examples": [
      -      "accounts"
      -    ],
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "mode": {
      -    "description": "Mode run.",
      -    "enum": [
      -      "hashtag",
      -      "account",
      -      "search",
      -      "trends"
      -    ],
      -    "examples": [
      -      "hashtag"
      -    ],
      -    "type": "string"
      -  },
      -  "query": {
      -    "description": "Query asked for (search mode).",
      -    "examples": [
      -      "opensource"
      -    ],
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "source": {
      -    "const": "mastodon-public-api",
      -    "description": "Data source.",
      -    "type": "string"
      -  },
      -  "status_count": {
      -    "description": "Statuses returned.",
      -    "examples": [
      -      3
      -    ],
      -    "type": "integer"
      -  },
      -  "statuses": {
      -    "description": "Statuses, newest first (hashtag and account modes); empty otherwise.",
      -    "items": {
      -      "description": "One Mastodon status.",
      -      "properties": {
      -        "author_acct": {
      -          "description": "Author acct.",
      -          "examples": [
      -            "Gargron"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "author_display_name": {
      -          "description": "Author display name.",
      -          "examples": [
      -            "Eugen Rochko"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "content_html": {
      -          "description": "Content as the instance serves it (sanitized HTML).",
      -          "examples": [
      -            "<p>Open source rocks</p>"
      -          ],
      -          "type": "string"
      -        },
      -        "created_at": {
      -          "description": "Creation time.",
      -          "examples": [
      -            "2026-09-27T01:00:00.000Z"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "favourites": {
      -          "description": "Favourites.",
      -          "examples": [
      -            3
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "id": {
      -          "description": "Status id.",
      -          "examples": [
      -            "115000000000000001"
      -          ],
      -          "type": "string"
      -        },
      -        "is_reblog": {
      -          "description": "Whether this status is a boost of another.",
      -          "examples": [
      -            false
      -          ],
      -          "type": "boolean"
      -        },
      -        "language": {
      -          "description": "Language code.",
      -          "examples": [
      -            "en"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "media": {
      -          "description": "Media attachments.",
      -          "examples": [
      -            []
      -          ],
      -          "items": {
      -            "description": "One attachment.",
      -            "properties": {
      -              "type": {
      -                "description": "image, video, gifv, audio...",
      -                "examples": [
      -                  "image"
      -                ],
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "url": {
      -                "description": "Media URL.",
      -                "examples": [
      -                  "https://files.mastodon.social/media_attachments/files/x.png"
      -                ],
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "type",
      -              "url"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "reblog_of_url": {
      -          "description": "URL of the boosted status when is_reblog.",
      -          "examples": [
      -            null
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "reblogs": {
      -          "description": "Boosts.",
      -          "examples": [
      -            2
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "replies": {
      -          "description": "Replies.",
      -          "examples": [
      -            1
      -          ],
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "sensitive": {
      -          "description": "Marked sensitive.",
      -          "examples": [
      -            false
      -          ],
      -          "type": "boolean"
      -        },
      -        "spoiler_text": {
      -          "description": "Content warning text, empty when none.",
      -          "examples": [
      -            ""
      -          ],
      -          "type": "string"
      -        },
      -        "tags": {
      -          "description": "Hashtags on the status.",
      -          "examples": [
      -            [
      -              "opensource"
      -            ]
      -          ],
      -          "items": {
      -            "description": "Hashtag name.",
      -            "examples": [
      -              "opensource"
      -            ],
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "text": {
      -          "description": "Plain-text content.",
      -          "examples": [
      -            "Open source rocks"
      -          ],
      -          "type": "string"
      -        },
      -        "url": {
      -          "description": "Web URL.",
      -          "examples": [
      -            "https://mastodon.social/@Gargron/115000000000000001"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "visibility": {
      -          "description": "public, unlisted...",
      -          "examples": [
      -            "public"
      -          ],
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "id",
      -        "url",
      -        "created_at",
      -        "text",
      -        "content_html",
      -        "language",
      -        "visibility",
      -        "replies",
      -        "reblogs",
      -        "favourites",
      -        "is_reblog",
      -        "reblog_of_url",
      -        "author_acct",
      -        "author_display_name",
      -        "media",
      -        "tags",
      -        "sensitive",
      -        "spoiler_text"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "tag": {
      -    "description": "Hashtag asked for (hashtag mode).",
      -    "examples": [
      -      "opensource"
      -    ],
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  }
      -}
    • removedOutput schema / properties / result / required
      Removed value: -[
      -  "mode",
      -  "instance",
      -  "tag",
      -  "acct",
      -  "query",
      -  "kind",
      -  "account",
      -  "statuses",
      -  "accounts",
      -  "hashtags",
      -  "status_count",
      -  "source",
      -  "as_of",
      -  "checked_at"
      -]
    • removedOutput schema / properties / status / description
      Removed value: -"Present only on a delivered result."
    • removedOutput schema / properties / worker / description
      Removed value: -"Catalog name of the worker that ran."
    • removedOutput schema / properties / worker / examples
      Removed value: -[
      -  "market.quote"
      -]
    • removedOutput schema / title
      Removed value: -"social.mastodon response"
  2. Changed1 schema field changed
    • addedOutput schema / properties / attribution
      Added value: +{
      +  "description": "Present only when the result's text was machine-translated: the credit to show with it.",
      +  "items": {
      +    "description": "A credit.",
      +    "properties": {
      +      "text": {
      +        "description": "Credit.",
      +        "examples": [
      +          "Translated by Google"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Link.",
      +        "examples": [
      +          "https://translate.google.com"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "text",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / language
      Added value: +{
      +  "description": "Optional BCP-47 language tag (en, ja, ko, pt-BR): the human-readable strings of the result (notes, details, reasons) are translated into this language; data, codes, numbers and URLs are untouched. Default: as produced.",
      +  "maxLength": 35,
      +  "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$",
      +  "type": "string"
      +}
  4. Added

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so safety is covered. The description adds genuinely useful context beyond them: keyless operation against any public instance, that data is live, and a concrete $0.05 per call cost — none of which appear in the structured fields.

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?

Front-loaded with the resource, then modes, then usage, then inputs and cost — a sensible ordering with no filler sentences. It is dense, and the trailing enumeration of return fields is somewhat list-heavy, but nothing is wasted.

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

Completeness4/5

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

For a multi-mode, 9-parameter read tool this covers what an agent needs: the modes, their parameters, keyless access, live data and cost. Since an output schema exists, the return-field listing is largely redundant, which is the only real gap in an otherwise complete definition.

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%, so every parameter is already documented with its mode and limits. The description restates the mode list and the tag/acct/query pairing but adds no syntax, default or edge-case detail beyond what the schema provides — baseline 3 is appropriate.

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 resource (Mastodon data) with the four concrete modes it covers (hashtag timeline, account, search, trends) and the per-post payload. An agent can distinguish this from hubvibe_social_bluesky and hubvibe_social_x_pulse by the fediverse/Mastodon scoping alone.

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?

Gives a clear use case ('social listening and trend tracking in the fediverse') and enumerates the modes with their required inputs. However, it never names the sibling social tools as alternatives, so routing between Mastodon, Bluesky and X remains inferential.

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.