APITube News

io.apitube由 apitube.io 發布官方發布者v1.0.1更新於 Oct 24, 2026

Real-time news search across 500,000+ sources in 60+ languages with sentiment and entities.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取資料與分析

概覽

AI 產生的概覽

託管式 APITube 新聞搜尋伺服器,讓助理跨大量來源檢索即時與歷史文章,並支援情緒與實體篩選。

可以做什麼
  • 依關鍵字、標題、語言、國家、來源網域、日期範圍、情緒分數、媒體與閱讀時間搜尋新聞,並支援排序、分頁、彙總與關鍵字標示
  • 把名稱或前綴解析為實體、分類、主題與產業 ID,供精確篩選使用
  • 依人物、組織、地點、品牌、事件、災害與疾病等具名實體篩選或排除
  • 提供公司監測、主題情緒、突發新聞與雙主題報導比較等內建提示詞
適用情境
適合需要把即時或歷史新聞當成結構化資料的場合:品牌與公司輿情監測、報導情緒分析、為代理提供最新新聞依據,或把新聞接入研究與風險流程。
執行需求
遠端 Streamable HTTP 端點,不需安裝本機套件。需要 APITube API 金鑰,透過 Authorization Bearer 權杖(或 X-API-Key 標頭)傳送,並需付費方案(Starter 以上),免費層僅涵蓋 REST API。僅支援 stdio 的用戶端需透過 mcp-remote 之類的橋接。
安裝前請注意
API 金鑰是可計費的憑證,應避免寫入共用設定檔,用戶端支援時優先採用提示輸入。此伺服器屬於付費方案,使用會產生訂閱費用,並依金鑰限流。兩個工具皆為唯讀,但搜尋查詢與篩選條件會傳送到 APITube 的託管服務。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 APITube News,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.apitube%2Fnews/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "apitube-news": {
      "type": "http",
      "url": "https://mcp.apitube.io/",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

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
bash
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:

json
{  "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):

json
{  "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):

json
{  "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:

json
{  "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:

json
{  "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:

bash
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}'
json
{  "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:

bash
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:

jsonc
{ "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:

jsonc
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

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.

來源:README.md,提交 e87485d

工具

2

search_news

News Search

Search news articles using APITube News API with comprehensive filtering. IMPORTANT INSTRUCTIONS FOR QUERY CONSTRUCTION: 1. DO NOT use dots in parameter names directly in the root object. Use nested objects instead. 2. The system will automatically convert nested objects to dot notation for the API. Example: Use { language: { code: "en" } } instead of { "language.code": "en" }. 3. For multiple values in one parameter, use COMMA separation (e.g., "en,ru,fr" for multiple languages). 4. Integer filters (has_*, is_*) accept ONLY 0 or 1 (e.g., has_image=1, is_duplicate=0). 5. Date format: ISO 8601 (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ). 6. Sentiment scores range: -1.0 (negative) to 1.0 (positive). 7. Default sorting: published_at DESC (newest first). 8. Unknown parameters are rejected with an error (-32602) instead of being silently ignored — check the spelling against the list below. 9. By default the response returns id, title, href, published_at, description and source.domain. The article body is NOT included — request it explicitly with fl (e.g. fl: "title,href,body"). AVAILABLE PARAMETERS: ### Content Search - title: Search by article title (supports up to 3 keywords with comma separation) IMPORTANT: a title search covers at most a 31-day published_at window. Omit the dates and the last 31 days are searched; pass a range wider than 31 days and the call fails with 400 ER0110. To cover a longer period, make one call per month-sized window. - ignore: { title: "keyword" } - Exclude articles with specific titles ### Languages (60+ supported) - language: { code: "en,ru,fr" } - Filter by language codes (up to 3) - ignore: { language: { code: "fr" } } - Exclude specific languages ### Categories (IPTC taxonomy) - category: { id: "medtop:04000000" } - Filter by category ID (up to 3) - ignore: { category: { id: "315" } } - Exclude categories ### Topics - topic: { id: "crypto_news,climate_change" } - Filter by topic ID (up to 3) - ignore: { topic: { id: "2" }

輸入參數flhlpagesortbrandeventfacetmediatitletopicauthorentity另有 26 個

suggest

Resolve Taxonomy IDs

Resolve a name or prefix to APITube taxonomy IDs so you can use them in the `search_news` tool's filters. The `search_news` tool's most precise filters require IDs you cannot guess: - entity.id — numeric (persons, organizations, locations, brands, events...) - category.id — IPTC slug, e.g. "medtop:04000000" - topic.id — slug - industry.id — numeric Use this tool FIRST to look those IDs up, then pass them into `search_news`. USAGE: - type: which taxonomy to autocomplete — one of "entities", "categories", "topics", "industries". - prefix: the name (or its beginning) to search, e.g. "Tesla", "Elon", "spo". Returns an array of matches; take the `id` of the best match and put it into `search_news`: suggest({ type: "entities", prefix: "Tesla" }) → [{ id: 12345, name: "Tesla, Inc.", ... }] search_news({ entity: { id: "12345" } })

輸入參數type必填prefix必填

版本歷史

1
  1. v1.0.1最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分