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 分