关于 mcp-newsapi
mcp-newsapi 是只读 MCP 服务,为 AI 助手提供 NewsAPI.ai 新闻文章、事件、趋势和账户用量查询,并设有付费令牌使用限制。
主要功能
- 01搜索和获取新闻文章
- 02搜索和获取事件
- 03自动补全概念与筛选项
- 04查看热门概念
- 05查询令牌用量与限额
适用场景
- 01查找某实体的近期报道
- 02浏览围绕同一事件的文章
- 03将名称解析为精确实体 URI
- 04监控剩余 API 令牌预算
MCP 相关
向 MCP 客户端提供 10 个只读工具,用于搜索 NewsAPI.ai 文章和事件、解析概念及筛选项、获取趋势和查询账户用量。会话令牌预算和本地限制可控制计费搜索。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @nubiia/mcp-newsapiNEWSAPI_AI_API_KEY密钥Your NewsAPI.ai API key (newsapi.ai → Dashboard).NEWSAPI_AI_MAX_TOKENS_PER_SESSION密钥Max NewsAPI.ai tokens this server may spend per session (process lifetime). Defaults to 200.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
10收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| lang | any | 否 | 3 位字母的 ISO 639-3 语言代码,例如 "spa" 或 ["eng", "spa"]。按 OR 逻辑匹配。接受单个字符串或字符串数组。 |
| page | integer | 否 | 结果页码,从 1 开始(默认值为 1)。 |
| count | integer | 否 | 每页文章数,1–100(默认值为 10)。请设为较小值以节省上下文。 |
| keyword | string | 否 | 自由文本关键词或短语,用于主题和一般术语(例如 "inflation"、"wildfire")。请勿用于公司、人物、地点或组织:常见词也可能是名称(例如 "Telefónica" 也匹配普通西班牙语形容词 "telefónica"),从而产生无关结果。对于这些实体,请先调用 suggest_concepts,并将返回的 URI 传入 concept_uris。 |
| sort_by | enum | 否 | 排序方式(默认值为 date)。"rel" 按与查询的相关性排序。date | rel | sourceImportance | cosSim |
| body_len | integer | 否 | 每篇文章的正文最大字符数,0–5000(默认值为 300;0 表示不包含正文)。 |
| date_end | string | 否 | 最晚日期,YYYY-MM-DD(含当天);必须 >= date_start。启用 allow_archive 时,date_start 到 date_end(默认值为今天)的跨度最多为 1 年。 |
| sort_asc | boolean | 否 | 升序排列(默认值为 false)。 |
| data_types | any | 否 | 要包含的内容类型(默认值:全部)。接受单个字符串或字符串数组。 |
| date_start | string | 否 | 最早日期,YYYY-MM-DD(含当天)。必须在最近 31 天内,除非 allow_archive=true;此时 date_start 为必填项。 |
| keyword_loc | enum | 否 | 搜索关键词的位置(默认值:API 默认位置,即正文)。body | title | body,title |
| source_uris | any | 否 | 新闻来源 URI,例如 "bbc.co.uk"(使用 suggest_sources)。按 OR 逻辑匹配。接受单个字符串或字符串数组。 |
| concept_uris | any | 否 | 实体的概念 URI:公司、人物、地点、组织。对于任何命名实体,优先使用此参数,而非 keyword:先调用 suggest_concepts(免费)解析名称,然后将返回的 `uri` 传入此处。多个值按 OR 逻辑匹配,精确度远高于 keyword,可避免同名词造成的干扰。接受单个字符串或字符串数组。 |
| allow_archive | boolean | 否 | 默认值为 false:仅搜索最近 31 天(成本最低)。设为 true 可搜索历史档案;每查询一年会额外消耗令牌,且必须提供 date_start,日期范围最多为 1 年。 |
| category_uris | any | 否 | 类别 URI,例如 "news/Business"(使用 suggest_categories)。按 OR 逻辑匹配。接受单个字符串或字符串数组。 |
| location_uris | any | 否 | 新闻发生地点的地理位置 URI(使用 suggest_locations)。按 OR 逻辑匹配。接受单个字符串或字符串数组。 |
| max_sentiment | number | 否 | 情感值上限,-1 至 1(仅限英文文章)。 |
| min_sentiment | number | 否 | 情感值下限,-1 至 1(仅限英文文章)。 |
| ignore_keyword | string | 否 | 排除提及此内容的文章。 |
| ignore_source_uris | any | 否 | 排除这些新闻来源。接受单个字符串或字符串数组。 |
| include_duplicates | boolean | 否 | 包含重复/联合发布的文章(默认值为 false)。 |
| keyword_search_mode | enum | 否 | 关键字匹配方式:simple(任意词)、exact(完全匹配)或 phrase(短语)。simple | exact | phrase |
详细介绍
MCP NewsAPI.ai
适用于 NewsAPI.ai(Event Registry 新闻智能 API)的 Model Context Protocol(MCP)服务。它让 Claude 等 AI 助手能够搜索新闻文章和事件(围绕同一事件的文章集群)、将名称解析为实体 URI、查看趋势,并跟踪账户的令牌预算。
由 Nubiia 构建并维护 — 面向企业的 AI 自动化与集成服务(MCP、Holded、Pipedrive 等)。想为您的企业打造类似服务?请访问 nubiia.es 与我们联系。
⚠️ NewsAPI.ai 按令牌计费
每次搜索都会消耗您套餐中的令牌,而免费套餐的预算有限。本服务旨在节省用量:
- 结果数量默认设为 10(文章/事件),文章正文默认设为 300 个字符,因此每次调用消耗的令牌更少,也更节省助手的上下文窗口。
- 除非传入
allow_archive: true,否则搜索范围仅限于最近 31 天(涉及的每个年份的历史数据都会额外消耗令牌)。allow_archive需要date_start,且date_start→date_end(默认:今天)的范围最多为 1 年。若date_start/date_end超出最近 31 天且未设置allow_archive,请求会被拒绝并说明原因,而不是静默返回空结果。 - 完全没有筛选条件的搜索会在本地被拒绝,不会消耗任何令牌。
- 会话令牌预算(默认 200 个令牌,见下文)可在请求失控前将其拦截。
suggest_*工具和get_usage免费 — 搜索前可用它们将实体解析为 URI。get_usage会显示剩余预算。
根据实际账户测算的费用(31 天窗口):
| 工具 | 每次调用的令牌数 |
|---|---|
search_articles、get_article | 1 |
search_events、get_event(信息) | 5 |
get_event(include_articles) | 1 |
get_trending_concepts | 10 |
suggest_*、get_usage | 0 |
套餐和价格可能会有变动 — 请参阅 newsapi.ai/pricing 和
docs/api-notes.md。
功能
十个只读工具:
- 文章(2 个):
search_articles、get_article - 事件(2 个):
search_events、get_event - 自动建议(4 个):
suggest_concepts、suggest_categories、suggest_sources、suggest_locations - 趋势(1 个):
get_trending_concepts - 账户(1 个):
get_usage
共计:10 个工具,全部标记为 readOnlyHint: true — 本服务不会向 NewsAPI.ai 或任何其他地方写入数据。
v1 刻意不涵盖的内容
主题页面和已保存的搜索、分析服务(文本分类、任意文本的情感分析)、故事聚类、文章提及、聚合结果类型(conceptAggr、timeAggr、……)以及多租户配置。
安装
前置条件
- Node.js 22.14 或更高版本
- NewsAPI.ai 账户和 API 密钥,可从 newsapi.ai → Dashboard 获取
从 npm 安装
npm install -g @nubiia/mcp-newsapi
从源代码安装
git clone https://github.com/nubiia-dev/mcp-newsapi.git
cd mcp-newsapi
npm install
npm run build
配置
环境变量
| 变量 | 必填 | 说明 |
|---|---|---|
NEWSAPI_AI_API_KEY | 是 | 您的 NewsAPI.ai API 密钥(Dashboard)。这是密钥 — 切勿提交到版本库。 |
NEWSAPI_AI_MAX_TOKENS_PER_SESSION | 否 | 每个会话中本服务最多可消耗的 NewsAPI.ai 令牌数(直至服务进程重启)。默认值为 200。 |
export NEWSAPI_AI_API_KEY=your_newsapi_ai_key
export NEWSAPI_AI_MAX_TOKENS_PER_SESSION=200 # optional
会话令牌预算
预算按服务器进程计算:每个启动的 MCP 客户端/服务实例都有自己的计数器,因此两个配置为 200 的客户端合计可消耗 400。重启后会重置。
每次调用都会在发送之前按测得的令牌成本收费(见上表)。如果调用会超出剩余预算,工具会返回错误,说明剩余预算和总预算,以及如何提高预算——不会向 NewsAPI.ai 发送请求。免费工具(suggest_*、get_usage)永远不会被阻止。get_usage 还会在账户余额旁报告会话预算(maxTokens、spentTokens、remainingTokens)。API 直接拒绝的调用(4xx)会退还费用;已被接受后失败的调用(包括返回 {"error"} 正文的 HTTP 200)仍会计费,因为 API 会对此收费。无效值(例如 abc、-5)会回退为 200,并在 stderr 中显示警告;0 会禁用所有付费调用。
Claude Desktop 配置
将以下内容添加到 Claude Desktop 配置文件:
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"newsapi": {
"command": "npx",
"args": ["-y", "@nubiia/mcp-newsapi@latest"],
"env": {
"NEWSAPI_AI_API_KEY": "your_newsapi_ai_key",
"NEWSAPI_AI_MAX_TOKENS_PER_SESSION": "200"
}
}
}
}
如果是从源代码安装:
{
"mcpServers": {
"newsapi": {
"command": "node",
"args": ["/path/to/mcp-newsapi/dist/index.js"],
"env": {
"NEWSAPI_AI_API_KEY": "your_newsapi_ai_key"
}
}
}
}
Claude Code 配置
claude mcp add newsapi --env NEWSAPI_AI_API_KEY=your_newsapi_ai_key -- npx -y @nubiia/mcp-newsapi@latest
故障排除
- 在此仓库中启动时出现
sh: mcp-newsapi: command not found。 如果你从克隆的仓库目录启动 Claude Code(或其他 MCP 客户端),npx @nubiia/mcp-newsapi会解析本地package.json,而mcp-newsapi二进制文件不在PATH中。请使用@latest固定注册表版本(如上方示例所示),或从其他目录启动客户端。
工具
参数列表(lang、concept_uris、category_uris、source_uris、location_uris、
ignore_source_uris、data_types、types、concept_types)既可接受单个字符串,也可接受字符串数组:"lang": "spa" 和 "lang": ["spa"] 等效。
推荐流程:suggest_*(免费)→ search_* → get_*。
suggest_concepts · 只读 · 免费
将名称(“Telefónica”、“Pedro Sánchez”)解析为概念 URI。将 uri 作为
concept_uris 传入搜索,比关键词精确得多。
{ "prefix": "Telefónica", "types": ["org"], "count": 3 }
要搜索公司、人物、地点或组织? 请先用
suggest_concepts解析,并将返回的uri作为concept_uris传入。keyword用于自由词和主题,常见词的匹配结果会很杂:例如,在西班牙语中使用keyword: "Telefónica"也会匹配普通形容词“telefónica”。
suggest_categories、suggest_sources、suggest_locations · 只读 · 免费
同理,可用于类别(news/Business)、出版物(bbc.co.uk)和地点。
search_articles · 只读 · 1 个令牌
必须提供 keyword、concept_uris、category_uris、source_uris、
location_uris 中至少一项。默认值:10 条结果,按最新优先,跳过重复项,最近 31 天,正文长度为 300 个字符。使用 page 分页;响应中包含 total 和 pages。
{
"concept_uris": ["http://en.wikipedia.org/wiki/Telefónica"],
"lang": ["spa"],
"date_start": "2026-10-01",
"count": 5
}
日期必须是有效的 YYYY-MM-DD 日期,date_end 不得早于 date_start,并且适用上述存档规则(allow_archive 需要提供 date_start,最长为 1 年)。
其他选项:keyword_loc、keyword_search_mode、ignore_keyword、
ignore_source_uris、data_types(news/pr/blog)、sort_by
(date/rel/sourceImportance/cosSim)、min_sentiment/max_sentiment、
body_len、include_duplicates、allow_archive。
get_article · 只读 · 1 个令牌
通过 article_uri 获取单篇文章,正文较长(body_len,默认 3000)。
search_events · 只读 · 5 个令牌
事件:关于同一事件的文章集群,包含标题、简短摘要、日期、地点、关键概念和文章数量。适合查询“X 发生了什么”。sort_by: "size" 可优先显示最大的新闻;min_articles_in_event 可过滤杂项内容。
get_event · 只读 · 5 个令牌(其中 1 个用于 include_articles)
通过 event_uri 获取一个事件;或者设置 include_articles: true,获取报道该事件的文章。
get_trending_concepts · 只读 · 10 个令牌
当前热门的人物、组织和地点(对比最近 2 天与最近 2 周),涵盖
news、social、pr 或 blog(部分套餐可能无法使用 blog 趋势;调用失败仍会计费)。这是费用最高的工具:请谨慎调用。
get_usage · 只读 · 免费
availableTokens、usedTokens、remainingTokens。批量搜索前请先检查。
速率限制
本地防护机制会在 Agent 循环失控、耗尽令牌预算前将其拦截:
| 工具 | 限制 |
|---|---|
search_articles、search_events、get_article、get_event | 30 次请求/分钟 |
get_trending_concepts | 20 次请求/分钟 |
suggest_*、get_usage | 120 次请求/分钟 |
| 其他所有工具(默认) | 60 次请求/分钟 |
API 本身最多允许 5 个并发请求。429/502/503/504 响应以及连接被拒绝/DNS 错误会采用退避策略重试;对于结果不明确的失败(超时、连接重置),不会重试,因为计费请求可能已经扣费。
每次尝试的超时时间为 30 秒。
错误消息
401/403 响应会附带说明,而不只是显示“未授权”:密钥可能错误或已撤销,也可能是账户令牌不足(get_usage 可帮你判断具体原因)。
API 密钥会放在请求正文中发送,不会出现在 URL 中,并且会从所有错误消息中脱敏(包括 HTTP、网络和 JSON 解析错误)。
开发
npm install
npm run build
npm test # runs entirely against mocks — no network, no API key
npm run test:coverage
npm run lint
完整工作流请参阅 CONTRIBUTING.md;根据实际账户验证的 API 行为请参阅 docs/api-notes.md。
许可证
相关项目
@nubiia/mcp-holded— 用于 Holded 开票/会计 API 的 MCP 服务。@nubiia/mcp-signaturit— 用于 Signaturit 电子签名 API 的 MCP 服务。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。