Skip to content

Hottub News

by hottub.news · remote · no sign-in to list tools · v0.1.0 · published by news.hottub

Worldwide news for agents: search, sync and story clusters across outlets and languages. No key.

Changes · 4

10 tools: 4 change things and 6 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http hottub-news https://hottub.news/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "sync_news" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "sync_news" says "sync": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

10 tools

Changes things 4Claude Code: ask
  • news_statsItem counts over the last 24 hours by kind, language, country and source, plus the current sync cursor.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Item counts over the last 24 hours by kind, language, country and source, plus the current sync cursor.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • newsmapWhat the news covered in a period, for the world or a region: reports counted by publisher country (a choropleth map, as links to SVG and PNG) and the most widely covered stories w…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    What the news covered in a period, for the world or a region: reports counted by publisher country (a choropleth map, as links to SVG and PNG) and the most widely covered stories with outlet counts. Periods: YYYY-MM-DD (UTC day), YYYY-wWW (ISO week), YYYY-MM, or today, yesterday, this-week, last-week, this-month, last-month. Past periods are final and permanent.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • quote_placementQuote for placing a labeled, paid press release in the Hottub News mix via Hottub Business.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Quote for placing a labeled, paid press release in the Hottub News mix via Hottub Business. Price varies by topic tier, current topic interest, demand, targeting reach and duration; the response itemizes each factor. Read-only: returns a price; books and charges nothing.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • sync_newsIncremental feed: returns items added after `after`, oldest first, plus a new cursor.1 finding

    Why it is in this group

    • The name "sync_news" says "sync": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "sync_news" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "sync_news" says "sync": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Incremental feed: returns items added after `after`, oldest first, plus a new cursor. Call again with that cursor to get only what is new.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 6Claude Code: allow
  • find_entitiesLook up Wikidata ids for a name (e.g.No findings

    Why it is in this group

    • The name "find_entities" says "find": a word for reading.
    Description, as the server wrote it
    Look up Wikidata ids for a name (e.g. "Tesla", "Lagos") with how many items mention each in the last 7 days; pass the id as `entity` to search_news or list_stories.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_news_itemFull record for one item id (n_… for news, s_… for sponsored).No findings

    Why it is in this group

    • The name "get_news_item" says "get": a word for reading.
    Description, as the server wrote it
    Full record for one item id (n_… for news, s_… for sponsored).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_storyEvery item in a story (the `story` id on items, st_…): all outlets and languages covering the same event, newest first.No findings

    Why it is in this group

    • The name "get_story" says "get": a word for reading.
    Description, as the server wrote it
    Every item in a story (the `story` id on items, st_…): all outlets and languages covering the same event, newest first.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_sourcesRegistered sources with their language, country, kind and health.No findings

    Why it is in this group

    • The name "list_sources" says "list": a word for reading.
    Description, as the server wrote it
    Registered sources with their language, country, kind and health. Filter by q (name), country or lang.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_storiesThe most widely covered stories right now (last 48h), each with a neutral multi-source brief when available, outlet count, languages, entities and a representative report.No findings

    Why it is in this group

    • The name "list_stories" says "list": a word for reading.
    Description, as the server wrote it
    The most widely covered stories right now (last 48h), each with a neutral multi-source brief when available, outlet count, languages, entities and a representative report. Filter by lang, country, category, entity.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • search_newsNewest-first headlines from worldwide sources, optionally filtered by words, language, country, topic, source, kind and time.No findings

    Why it is in this group

    • The name "search_news" says "search": a word for reading.
    Description, as the server wrote it
    Newest-first headlines from worldwide sources, optionally filtered by words, language, country, topic, source, kind and time.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http hottub-news https://hottub.news/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__hottub-news__search_news",
      "mcp__hottub-news__list_stories",
      "mcp__hottub-news__find_entities",
      "mcp__hottub-news__get_story",
      "mcp__hottub-news__get_news_item",
      "mcp__hottub-news__list_sources"
    ],
    "ask": [
      "mcp__hottub-news__sync_news",
      "mcp__hottub-news__quote_placement",
      "mcp__hottub-news__newsmap",
      "mcp__hottub-news__news_stats"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as hottub-news. Review it before you use it.