mcpField
A
APITube News

APITube News

Remote
docs.apitube.ioSearch0Updated 9w ago

About APITube News

APITube News is a hosted MCP server that gives AI assistants structured access to live and archived news. Its search and taxonomy tools support detailed filtering, including sentiment and named entities.

Key features

  1. 01Search live and archived news
  2. 02Filter by language, source, dates, and sentiment
  3. 03Enrich articles with entities and topics
  4. 04Resolve taxonomy IDs with suggest
  5. 05Sort, paginate, facet, and highlight results

Use cases

  1. 01Monitor company coverage and sentiment
  2. 02Ground an agent in recent news articles
  3. 03Track breaking stories by subject
  4. 04Compare coverage volume and sentiment

MCP support

Exposes the read-only `search_news` and `suggest` tools, plus prompts for monitoring companies, analyzing topic sentiment, finding breaking news, and comparing coverage. MCP clients connect to its hosted Streamable HTTP endpoint.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://mcp.apitube.io/
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

All endpoints
Streamable HTTPhttps://mcp.apitube.io/Auth required

Tools

2
ParameterTypeRequiredDescription
flstringNoComma-separated fields to return (dot-notation supported), e.g. "id,title,source.name,sentiment.overall.score".
hlboolean|objectNoEnable highlighting (true) or object form.
hl.flstringNoFields to highlight, comma-separated.
hl.tagobjectNo
hl.tag.prestringNo
hl.tag.poststringNo
hl.fragsizeintegerNo
hl.snippetsintegerNo
pageintegerNoPage number (default 1).
sortobjectNo
sort.byenumNoField to sort by.published_at | created_at | id | source.rank.opr | read_time | sentiment.overall.score | sentiment.title.score | sentiment.body.score | media.images.count | media.videos.count | media.images.width.min | media.images.width.max | media.images.height.min | media.images.height.max | media_richness | shares.facebook.min | shares.facebook.max | shares.twitter.min | shares.twitter.max | shares.reddit.min | shares.reddit.max | relevance | engagement | quality | controversy | trust
sort.orderenumNoSort direction.asc | desc
brandobjectNo
brand.namestringNoBrand name(s), comma-separated up to 3.
eventobjectNo
event.namestringNoNamed event entity, comma-separated up to 3. The directory is nearly empty — prefer type/category; an unknown name returns 400 ER0228.
event.typestringNoEvent codes, comma-separated (max 5) — see /v1/news/event-types, e.g. layoffs, ipo, recall, wildfire.
event.categoryenumNoEvent family.business | society | environment
facetboolean|objectNoEnable faceting (true) or object form for analytics.
facet.fieldstringNoFacet field(s), comma-separated.
facet.limitintegerNo
facet.rangeobjectNoRange faceting → facet.range.* params.
facet.range.endstringNo
facet.range.gapstringNoe.g. "1MONTH" for dates or "0.25" for numbers.
facet.range.fieldstringNoNumeric/date field to bucket.
facet.range.startstringNo
facet.mincountintegerNo
mediaobjectNoMedia-content filter.
media.imagesobjectNo
media.images.countobjectNo
media.images.count.maxintegerNo
media.images.count.minintegerNo
media.images.widthobjectNo
media.images.width.maxintegerNo
media.images.width.minintegerNo
media.images.heightobjectNo
media.images.height.maxintegerNo
media.images.height.minintegerNo
media.videosobjectNo
media.videos.countobjectNo
media.videos.count.maxintegerNo
media.videos.count.minintegerNo
titlestringNoSearch by article title. Up to 3 keywords comma-separated (OR). Phrase in quotes for exact match.
topicobjectNo
topic.idstringNoTopic id(s), comma-separated up to 3.
authorobjectNo
author.idstringNoAuthor id(s), comma-separated up to 3.
author.namestringNoAuthor name(s), comma-separated up to 3.
entityobjectNoNamed-entity filter.
entity.idstringNoNumeric entity id(s), comma-separated up to 3.
ignoreobjectNoExclusion filters — exclude articles matching these. Mirror the positive filters.
ignore.brandobjectNo
ignore.brand.namestringNo
ignore.eventobjectNo
ignore.event.namestringNoExclude these named events (up to 3).
ignore.event.typestringNoExclude these event codes (max 5).
ignore.titlestringNoExclude titles with these keyword(s), comma-separated.
ignore.topicobjectNo
ignore.topic.idstringNo
ignore.authorobjectNo
ignore.author.idstringNo
ignore.author.namestringNo
ignore.entityobjectNo
ignore.entity.idstringNo
ignore.personobjectNo
ignore.person.namestringNo
ignore.sourceobjectNo
ignore.source.idstringNo
ignore.source.biasstringNo
ignore.source.domainstringNo
ignore.source.countryobjectNo
ignore.source.country.codestringNo
ignore.diseaseobjectNo
ignore.disease.namestringNo
ignore.categoryobjectNo
ignore.category.idstringNo
ignore.disasterobjectNo
ignore.disaster.namestringNo
ignore.industryobjectNo
ignore.industry.idstringNo
ignore.languageobjectNo
ignore.language.codestringNo
ignore.locationobjectNo
ignore.location.namestringNo
ignore.organizationobjectNo
ignore.organization.namestringNo
personobjectNo
person.namestringNoPerson name(s), comma-separated up to 3.
sourceobjectNoSource filter.
source.idstringNoSource id(s), comma-separated up to 3.
source.biasenumNoMedia bias (comma-separated for multiple).left | center | right
source.rankobjectNo
source.rank.oprobjectNoOpenPageRank range (0-7).
source.rank.opr.maxnumberNo
source.rank.opr.minnumberNo
source.domainstringNoDomain(s), e.g. "cnn.com,bbc.com".
source.countryobjectNo
source.country.codestringNoCountry code(s), e.g. "us,uk,de".
diseaseobjectNo
disease.namestringNoDisease name(s), comma-separated up to 3.
categoryobjectNoIPTC category filter.
category.idstringNoCategory id, e.g. "medtop:04000000". Comma-separated up to 3.
disasterobjectNo
disaster.namestringNoDisaster name(s), comma-separated up to 3.
industryobjectNo
industry.idstringNoIndustry id(s), comma-separated up to 3.
languageobjectNoLanguage filter.
language.codestringNoISO codes, comma-separated up to 3 (e.g. "en,ru,fr").
locationobjectNo
location.namestringNoLocation name(s), comma-separated up to 3.
per_pageintegerNoResults per page (default 10). One response carries at most 25 articles.
has_imageenumNoArticles with at least one image.0 | 1
has_videoenumNoArticles with at least one video.0 | 1
read_timeobjectNoReading time in minutes.
read_time.maxintegerNo
read_time.minintegerNo
sentimentobjectNoSentiment filter. Scores range -1.0..1.0.
sentiment.bodyobjectNo
sentiment.body.scoreobjectNo
sentiment.body.score.maxnumberNo
sentiment.body.score.minnumberNo
sentiment.mixedenumNoTitle/body sentiment differ.0 | 1
sentiment.titleobjectNo
sentiment.title.scoreobjectNo
sentiment.title.score.maxnumberNo
sentiment.title.score.minnumberNo
sentiment.overallobjectNo
sentiment.overall.scoreobjectNo
sentiment.overall.score.maxnumberNo
sentiment.overall.score.minnumberNo
sentiment.overall.polarityenumNoOverall sentiment polarity.positive | negative | neutral
sentiment.consistentenumNoTitle/body sentiment agree.0 | 1
has_authorenumNoHas an attributed author.0 | 1
is_paywallenumNo0 to exclude paywalled content.0 | 1
is_breakingenumNoBreaking news only.0 | 1
is_duplicateenumNo0 to exclude duplicates.0 | 1
is_long_readenumNoRead time >= 5 minutes.0 | 1
organizationobjectNo
organization.namestringNoOrganization name(s), comma-separated up to 3.
published_atobjectNoPublication date range (ISO 8601).
published_at.endstringNoYYYY-MM-DD or RFC3339.
published_at.startstringNoYYYY-MM-DD or RFC3339.
has_hq_imagesenumNoHigh-quality images (width >= 1200px).0 | 1
is_media_richenumNoBoth images and videos.0 | 1
is_short_readenumNoRead time < 3 minutes.0 | 1
is_premium_sourceenumNoPremium sources (OPR >= 6).0 | 1
is_verified_sourceenumNoVerified sources (OPR >= 5).0 | 1

Details

From the project README
APITube

APITube News MCP

Real-time and archived news search for AI agents, over the Model Context Protocol.

Hosted at https://mcp.apitube.io/ — no package to install, no local process to keep alive.

License: MIT Transport: Streamable HTTP MCP protocol 2025-11-25 2 tools 300,000+ sources 59 languages

Quick Start • Tools • Filters • Prompts • Pricing • Troubleshooting • Docs • Support

300,000+ sources · 177 countries · 59 languages. Sentiment and entities on every article.


Overview

The APITube MCP server gives an assistant live access to the world's news as structured data, not scraped HTML. It exposes 2 tools:

  • search_news — most of the News API filter set in one call: keywords, language, country, source domain and quality rank, sentiment range, named entities, media, date ranges, sorting, faceting and highlighting.
  • suggest — resolves a name like "Tesla" into the entity, category, topic and industry IDs the precise filters need.

Every article comes back enriched by the pipeline behind it: sentiment scores, extracted entities (people, organizations, locations, brands, events), IPTC categories, topics and industries.

MCP client  →  mcp.apitube.io  →  api.apitube.io
               (this server)      (News API)

JSON-RPC over HTTP, Authorization: Bearer <API_KEY>
PropertyValue
Endpointhttps://mcp.apitube.io/
TransportStreamable HTTP (POST /), JSON-RPC 2.0
Protocol2025-11-25, negotiated down to your client's version (2024-11-05 works)
ServerAPITube News MCP-Server 1.0.0
AuthAuthorization: Bearer <API_KEY>, or X-API-Key: <API_KEY>
Registryio.apitube/news (server.json)

Quick Start

  1. Get an API key at apitube.io.
  2. Add the server to your client with the block below — each one is also a ready file in configs/.
  3. Restart the client and ask it something like "find positive breaking news about Tesla in English from the last week".
Claude Code
claude mcp add --transport http apitube-news https://mcp.apitube.io/ \
  --header "Authorization: Bearer YOUR_API_KEY"

Check it with /mcp. To commit the server to a project instead, put configs/claude-code.mcp.json at the repo root as .mcp.json.

Cline

MCP Servers → Configure, or ~/.cline/mcp.json for the CLI:

{
  "mcpServers": {
    "apitube-news": {
      "type": "streamableHttp",
      "url": "https://mcp.apitube.io/",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" },
      "disabled": false,
      "autoApprove": []
    }
  }
}

type must be set explicitly — without it Cline falls back to the legacy SSE transport, which this server does not serve. Both tools are read-only, so autoApprove: ["search_news", "suggest"] is safe if you would rather not confirm every call.

Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):

{
  "mcpServers": {
    "apitube-news": {
      "url": "https://mcp.apitube.io/",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Settings → MCP should list apitube-news as connected.

Claude Desktop

Claude Desktop only launches local processes, so bridge the hosted server with mcp-remote. Edit claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):

{
  "mcpServers": {
    "apitube-news": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.apitube.io/",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Restart the app; the tools appear under the slider icon.

VS Code (GitHub Copilot)

.vscode/mcp.json, with the key prompted instead of stored in plain text:

{
  "inputs": [
    { "type": "promptString", "id": "apitube-key", "description": "APITube API Key", "password": true }
  ],
  "servers": {
    "apitube-news": {
      "type": "http",
      "url": "https://mcp.apitube.io/",
      "headers": { "Authorization": "Bearer ${input:apitube-key}" }
    }
  }
}

Open Copilot Chat in Agent mode and enable the apitube-news tools.

Windsurf

~/.codeium/windsurf/mcp_config.json — note serverUrl, not url:

{
  "mcpServers": {
    "apitube-news": {
      "serverUrl": "https://mcp.apitube.io/",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Windsurf Settings → Cascade → MCP Servers → refresh.

Any other client, or plain curl

Anything that speaks Streamable HTTP takes the URL directly; clients limited to stdio go through mcp-remote, as in the Claude Desktop block. The handshake needs no key:

curl -s -X POST https://mcp.apitube.io/ \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}},"id":1}'
{
  "jsonrpc": "2.0",
  "result": {
    "protocolVersion": "2024-11-05",
    "serverInfo": { "name": "APITube News MCP-Server", "version": "1.0.0" },
    "capabilities": { "tools": { "listChanged": true }, "prompts": { "listChanged": true } }
  }
}

A real search adds the key:

curl -s -X POST https://mcp.apitube.io/ \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_news","arguments":{"title":"Bitcoin","language":{"code":"en"},"per_page":5}},"id":1}'

Tools

ToolTitleKindWhat it does
search_newsNews Searchread-onlySearches articles across the News API filter set
suggestResolve Taxonomy IDsread-onlyTurns a name or prefix into entity / category / topic / industry IDs
search_news

Arguments are nested objects, never dotted strings:

{ "language": { "code": "en" } }      // ✅
{ "language.code": "en" }             // ❌ rejected

Three things worth knowing before the first call:

  • The article body is not returned by default. The default field list is id,title,href,published_at,description,source.domain. Ask for the text explicitly with fl: "title,href,body".
  • One response carries at most 25 articles. per_page defaults to 10 and is clamped to 25; walk further with page. If a result set still has to be cut — 25 articles of full text can be large — the response gains an _mcp_truncated field saying how many were omitted.
  • A title search spans at most 31 days. With no dates it covers the last 31 days; a wider explicit range fails with 400 ER0110. Split longer periods into month-sized windows. Searches without a title filter have no range limit.

Misspelled arguments are rejected with JSON-RPC -32602 and a suggestion, instead of being silently ignored:

Unknown parameter 'langauge.code'. Did you mean 'language.code'?

export, query and prompt are deliberately not exposed.

suggest

The precise filters take IDs you cannot guess, so resolve them first:

suggest({ type: "entities", prefix: "Tesla" })
// → [{ id: 474, name: "Tesla Robotaxi", type: "brand", … }, …]

search_news({ entity: { id: "474" }, language: { code: "en" } })

type is one of entities, categories, topics, industries; prefix is a name or its beginning. Both are required. Matching is by prefix, so read the names before filtering on the first hit.

Filters

Everything below belongs to search_news. Content, taxonomy, language, author and source filters have an ignore.* twin for exclusion (ignore.title, ignore.entity.id, ignore.source.domain, …); sentiment, media and time filters do not. Multi-value filters take up to 3 comma-separated values. has_* and is_* take 0 or 1, not true/false.

Content and taxonomy
ArgumentExample
title"Bitcoin" — up to 3 comma-separated keywords, quotes for an exact phrase
category.id"medtop:04000000" — IPTC taxonomy
topic.id"industry.crypto_news" — slug, from suggest
industry.id"411" — numeric, from suggest
entity.id"474" — from suggest
person.name · organization.name · location.name"Elon Musk" · "Tesla,Apple" · "Tokyo"
brand.name · event.name · disaster.name · disease.name"Nike" · "Olympics" · "Earthquake" · "COVID-19"
author.id · author.name · has_author"123" · "Jane Smith" · 1
language.code"en,de,fr"
Sentiment
ArgumentExample
sentiment.overall.polarity"positive" | "negative" | "neutral"
sentiment.overall.score.{min,max}-1.0 … 1.0
sentiment.title.score · sentiment.body.scoresame range, headline or body only
sentiment.mixed · sentiment.consistent1 — title and body disagree / agree
Sources and quality
ArgumentExample
source.domain · source.id"cnn.com,bbc.com" · "314"
source.country.code"us,uk,de"
source.bias"left" | "center" | "right"
source.rank.opr.{min,max}OpenPageRank, 0–7
is_premium_source · is_verified_sourceOPR ≥ 6 · OPR ≥ 5
is_duplicate · is_paywall0 to exclude
Media, shape and time
ArgumentExample
has_image · has_video · has_hq_images · is_media_rich1
media.images.count.{min,max} · media.images.{width,height} · media.videos.count{ "min": 2 }
is_breaking · is_long_read · is_short_read1 — read time ≥ 5 min / < 3 min
read_time.{min,max}minutes
published_at.{start,end}"2026-01-01" … "2026-01-31", ISO 8601
Output: sorting, paging, faceting, highlighting
ArgumentExample
sort.bypublished_at, relevance, engagement, quality, controversy, trust, source.rank.opr, sentiment.*.score, media.*, read_time, …
sort.order"asc" | "desc"
page · per_page1 · 10 (max 25)
fl"id,title,source.name,sentiment.overall.score" — dot notation for nested fields
facettrue, or { "field": "source.id,language.id", "limit": 20, "mincount": 5 }
facet.range{ "field": "published_at", "start": "2026-01-01", "end": "2026-12-31", "gap": "1MONTH" }
hltrue, or { "fl": "title,body", "fragsize": 300, "tag": { "pre": "<mark>", "post": "</mark>" } }

Prompts

Slash commands in clients that support MCP prompts:

PromptArgumentsWhat it does
monitor_companycompany (required), daysRecent coverage and sentiment for one company
topic_sentimenttopic (required), languageSentiment breakdown of coverage on a topic
breaking_newssubject, countryLatest breaking stories, optionally narrowed
compare_coveragesubject_a, subject_b (both required)Volume and sentiment, two subjects side by side

Use cases

You want toAsk forTools
Watch a brand across languagesmentions of the company with sentiment, last 7 dayssuggest → search_news
Feed a trading or risk modelentity + industry filtered news with sentiment scoressuggest → search_news
Ground an agent in live newsrecent articles with fl: "title,href,body" for RAGsearch_news
Track a running storyis_breaking: 1, sorted by published_atsearch_news
Measure share of voicetwo subjects compared by volume and sentimentcompare_coverage
Study an archivea date range with no title filter — no 31-day limitsearch_news

Pricing

The MCP server is part of the paid plans; the free tier covers the REST API only.

PlanPriceRequestsMCP server
Free$0100/day—
Starter$29/mo10,000/mo✅
Basic$99/mo50,000/mo✅
Professional$199/mo150,000/mo✅

Annual billing takes 20% off. Current numbers always live at apitube.io/pricing.

Page size is capped separately: through MCP one response holds at most 25 articles on every plan, regardless of the larger per_page the REST API allows.

Troubleshooting

Auth and transport failures arrive as JSON-RPC -32000 with an APITube code in the message and the matching HTTP status.

CodeHTTPMeaningFix
ER0201401No API key reached the serverThe header is missing, or the client strips custom headers — use the mcp-remote bridge
ER0202401Key invalid or revokedRe-copy it from apitube.io
ER0230401Key expiredExtend the expiry in the key's settings
ER0601 / ER0602403IP or referrer not allowed for this keyAdjust the key's restrictions
ER0603403Key not permitted to call this toolGrant it access to search_news / suggest
ER0429429Over 120 requests/minuteSlow down — the limit is per key
ER0900503Key validation temporarily unavailableRetry; the key is fine, do not reissue it
Other symptoms
SymptomCause
Client reconnects in a loopIt opened a GET SSE stream. Expected: the server answers 405 Allow: POST because it has no event stream, and compliant clients fall back to POST
-32602 with a suggested nameMisspelled argument — arguments are nested objects, never dotted keys
403 from a Python scriptThe default Python-urllib/3.x user agent is rejected at the edge. Send a real User-Agent, or use requests
Search returns nothing for an old storyA title search only covers 31 days. Add published_at and walk month by month
Articles arrive without textThe body is excluded by default. Add fl: "title,href,body"

Documentation

ResourceLink
MCP server referencehttps://docs.apitube.io/platform/news-api/ai/mcp-server
Editor setup, one-click install linkshttps://docs.apitube.io/platform/news-api/ai/code-editors
All News API parametershttps://docs.apitube.io/platform/news-api/everything
Authenticationhttps://docs.apitube.io/platform/news-api/authentication
Machine-readable server cardhttps://docs.apitube.io/.well-known/mcp/server-card.json
Agent skill, SDKs, migration kitshttps://github.com/apitube
Installing this server as an agentllms-install.md

Registry

Published in the official MCP Registry from server.json in this repository:

mcp-name: io.apitube/news

See more on Claude Market's MCP directory.

Support

ChannelWhere
Bugs and correctionsopen an issue
Account and billing[email protected]
Everything elsehttps://apitube.io/contact

Found an argument that behaves differently from what is written here? Open an issue with the request you sent and the response you got — those corrections are the most useful thing you can file.

License

MIT — see LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.