Hottub News

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

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
75%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,117Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (1.65% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "hottub-news": {
      "url": "https://hottub.news/mcp"
    }
  }
}

Remote endpoints

https://hottub.news/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_news(lang, country, topic, source, kind, ...)

Newest-first headlines from worldwide sources, optionally filtered by words, language, country, topic, source, kind and time.

Input Schema

{
  "type": "object",
  "properties": {
    "lang": {
      "type": "string",
      "description": "Comma-separated ISO 639-1 codes, e.g. \"en,es\""
    },
    "country": {
      "type": "string",
      "description": "Comma-separated ISO 3166-1 alpha-2 codes of the publisher's country, e.g. \"US,GB\""
    },
    "topic": {
      "type": "string",
      "description": "Comma-separated topics, e.g. \"space,science\""
    },
    "source": {
      "type": "string",
      "description": "Comma-separated source ids (see list_sources) or publisher domains"
    },
    "kind": {
      "type": "string",
      "description": "Comma-separated: article, press_release, official, community, research, sponsored"
    },
    "category": {
      "type": "string",
      "description": "Comma-separated IPTC top-level categories: arts-culture-entertainment, conflict-war, crime-law, disaster-accident, economy-business, education, environment, health, human-interest, labour, lifestyle-leisure, politics, religion, science-technology, society, sport, weather"
    },
    "sentiment": {
      "type": "string",
      "description": "Comma-separated: negative, neutral, positive"
    },
    "political": {
      "type": "boolean",
      "description": "true: political stories only (political score ≥ 0.5); false: non-political only"
    },
    "tone_min": {
      "type": "number",
      "minimum": -1,
      "maximum": 1,
      "description": "Only items with tone ≥ this (-1 most negative … 1 most positive)"
    },
    "tone_max": {
      "type": "number",
      "minimum": -1,
      "maximum": 1
    },
    "since": {
      "type": "string",
      "description": "Only items published at/after this: RFC 3339, a date, or an age like \"6h\", \"2d\""
    },
    "until": {
      "type": "string",
      "description": "Only items published at/before this"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500,
      "default": 50
    },
    "sponsored": {
      "type": "string",
      "enum": [
        "include",
        "exclude",
        "only"
      ],
      "default": "include",
      "description": "Paid press releases are labeled; exclude to omit them"
    },
    "format": {
      "type": "string",
      "enum": [
        "md",
        "lines",
        "ndjson",
        "json"
      ],
      "default": "md",
      "description": "md: readable with summaries; lines: tab-separated, fewest tokens; ndjson/json: full records"
    },
    "q": {
      "type": "string",
      "description": "What you're looking for, in any language. Matches by meaning and by keyword (hybrid) over the last 7 days unless since is given; results carry a relevance score."
    },
    "match": {
      "type": "string",
      "enum": [
        "hybrid",
        "keyword",
        "semantic"
      ],
      "default": "hybrid",
      "description": "keyword: exact words only; semantic: meaning only (cross-language)"
    },
    "entity": {
      "type": "string",
      "description": "Comma-separated Wikidata ids (from find_entities), e.g. \"Q312\""
    },
    "collapse": {
      "type": "string",
      "enum": [
        "story"
      ],
      "description": "One item per story (best representative); related = other reports of it"
    },
    "sort": {
      "type": "string",
      "enum": [
        "newest",
        "hot",
        "positive",
        "negative"
      ],
      "default": "newest",
      "description": "hot: most widely covered stories of the last 48h, one per story; positive/negative: most positive/negative tone first (last 24h unless since is given)"
    },
    "before": {
      "type": "string",
      "description": "Paging cursor from a previous result's next link"
    }
  },
  "additionalProperties": false
}
🟢sync_news(lang, country, topic, source, kind, ...)

Incremental feed: returns items added after `after`, oldest first, plus a new cursor. Call again with that cursor to get only what is new.

Input Schema

{
  "type": "object",
  "properties": {
    "lang": {
      "type": "string",
      "description": "Comma-separated ISO 639-1 codes, e.g. \"en,es\""
    },
    "country": {
      "type": "string",
      "description": "Comma-separated ISO 3166-1 alpha-2 codes of the publisher's country, e.g. \"US,GB\""
    },
    "topic": {
      "type": "string",
      "description": "Comma-separated topics, e.g. \"space,science\""
    },
    "source": {
      "type": "string",
      "description": "Comma-separated source ids (see list_sources) or publisher domains"
    },
    "kind": {
      "type": "string",
      "description": "Comma-separated: article, press_release, official, community, research, sponsored"
    },
    "category": {
      "type": "string",
      "description": "Comma-separated IPTC top-level categories: arts-culture-entertainment, conflict-war, crime-law, disaster-accident, economy-business, education, environment, health, human-interest, labour, lifestyle-leisure, politics, religion, science-technology, society, sport, weather"
    },
    "sentiment": {
      "type": "string",
      "description": "Comma-separated: negative, neutral, positive"
    },
    "political": {
      "type": "boolean",
      "description": "true: political stories only (political score ≥ 0.5); false: non-political only"
    },
    "tone_min": {
      "type": "number",
      "minimum": -1,
      "maximum": 1,
      "description": "Only items with tone ≥ this (-1 most negative … 1 most positive)"
    },
    "tone_max": {
      "type": "number",
      "minimum": -1,
      "maximum": 1
    },
    "since": {
      "type": "string",
      "description": "Only items published at/after this: RFC 3339, a date, or an age like \"6h\", \"2d\""
    },
    "until": {
      "type": "string",
      "description": "Only items published at/before this"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500,
      "default": 50
    },
    "sponsored": {
      "type": "string",
      "enum": [
        "include",
        "exclude",
        "only"
      ],
      "default": "include",
      "description": "Paid press releases are labeled; exclude to omit them"
    },
    "format": {
      "type": "string",
      "enum": [
        "md",
        "lines",
        "ndjson",
        "json"
      ],
      "default": "md",
      "description": "md: readable with summaries; lines: tab-separated, fewest tokens; ndjson/json: full records"
    },
    "after": {
      "type": "integer",
      "description": "The cursor returned by your previous sync_news call; 0 to start from the oldest retained item"
    }
  },
  "required": [
    "after"
  ],
  "additionalProperties": false
}
🟢list_stories(limit, lang, country, category, entity, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 15
    },
    "lang": {
      "type": "string"
    },
    "country": {
      "type": "string"
    },
    "category": {
      "type": "string"
    },
    "entity": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "enum": [
        "md",
        "json"
      ],
      "default": "md"
    }
  },
  "additionalProperties": false
}
🟢find_entities(q)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string"
    }
  },
  "required": [
    "q"
  ],
  "additionalProperties": false
}
🟢get_story(story, format)

Every item in a story (the `story` id on items, st_…): all outlets and languages covering the same event, newest first.

Input Schema

{
  "type": "object",
  "properties": {
    "story": {
      "type": "string"
    },
    "format": {
      "type": "string",
      "enum": [
        "md",
        "lines",
        "ndjson",
        "json"
      ],
      "default": "md"
    }
  },
  "required": [
    "story"
  ],
  "additionalProperties": false
}
🟢get_news_item(id)

Full record for one item id (n_… for news, s_… for sponsored).

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢list_sources(q, country, lang)

Registered sources with their language, country, kind and health. Filter by q (name), country or lang.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string"
    },
    "country": {
      "type": "string"
    },
    "lang": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
🟢quote_placement(topics, lang, country, days)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "topics": {
      "type": "string",
      "description": "Comma-separated topics to target, e.g. \"ai,business\"; omit for run of network"
    },
    "lang": {
      "type": "string"
    },
    "country": {
      "type": "string"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 31,
      "default": 7
    }
  },
  "additionalProperties": false
}
🟢news_stats

Item counts over the last 24 hours by kind, language, country and source, plus the current sync cursor.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools