MCP新闻API服务器
模型上下文协议(MCP)服务器,用于公开来自新闻API的端点(https://newsapi.org)搜索和检索新闻文章。该服务器允许通过MCP协议对新闻数据进行编程访问。
先决条件
- Node.js(建议使用v18或更高版本)
- npm(附带Node.js)
- 新闻API密钥(从https://newsapi.org)
- (可选)MCP兼容客户端或运行器(例如,VSCode扩展、CLI)
设置
- 克隆存储库或确保您位于项目目录中。
- 安装依赖项:
npm install- 构建服务器:
npm run build这将创建一个 build 包含已编译JavaScript代码的目录。
- 设置您的新闻API密钥:
服务器从 NEWSAPI_KEY 环境变量。在运行服务器之前,在您的环境中设置此变量。 示例(Bash/Zsh):
export NEWSAPI_KEY="YOUR_API_KEY"替换 "YOUR_API_KEY" 使用您的实际新闻API密钥。
运行服务器
- 直接:
确保 NEWSAPI_KEY 设置环境变量,然后运行:
node build/index.js或者,如果你有一个开始脚本:
npm run start- 通过MCP转轮:
配置MCP客户端以使用stdio传输运行服务器。您还需要在MCP跑步者的设置中为API密钥配置环境变量。 MCP设置输入示例:
"mcp-newsapi": {
"transportType": "stdio",
"command": "node",
"args": [
"/path/to/mcp-newsapi/build/index.js"
],
"environment": {
"NEWSAPI_KEY": "YOUR_API_KEY"
}
// ... other optional settings ...
}替换 "YOUR_API_KEY" 使用您的实际新闻API密钥。
可用工具
服务器通过MCP公开以下工具,对应新闻API端点:
搜索_文章
- 说明: 使用Newsneneneba API“Everything”端点搜索新闻文章。
- 输入:
- q (字符串,必填):要在文章标题和正文中搜索的关键字或短语。 - sources (string,可选):一个逗号分隔的标识符字符串,用于您想要标题的新闻来源或博客。 - domains (string,可选):一个逗号分隔的域名字符串(例如bbc.co.uk、techcrunch.com),用于搜索。 - excludeDomains (string,可选):一个逗号分隔的域名字符串(例如bbc.co.uk、techcrunch.com),用于从搜索中排除。 - from (string,可选):允许的最旧文章的日期和可选时间。格式:YYYY-MM-DD或YYYY-MM-MM-DDHH:MM:SS(例如2024-01-01或2024-01-01T10:00:00)。 - to (string,可选):允许的最新文章的日期和可选时间。格式:YYYY-MM-DD或YYYY-MM-MM-DDHH:MM:SS。 - language (字符串,可选):您要获取标题的语言的2个字母的ISO 639-1代码。可能的选项:ar、de、en、es、fr、he、it、nl、no、pt、ru、sv、ud、zh。默认值:返回所有语言。 - sortBy (枚举:“相关性”、“流行度”、“publishedAt”,可选):对文章进行排序的顺序。可能的选项:相关性、流行度、publishedAt。默认值:相关性。 - pageSize (整数,可选,默认100):每页(请求)返回的结果数。默认值为20,最大值为100。 - page (整数,可选,默认值1):如果找到的总结果大于pageSize,则使用此选项浏览结果。
- 输出:
- 包含以下内容的对象 status, totalResults,以及一系列 articles 包括来源、作者、标题、描述、URL、图像URL、发布日期和内容等详细信息。
get_top_headlines
- 说明: 使用新闻API“热门新闻”端点获取热门新闻标题。
- 输入:
- q (字符串,可选):在文章标题和正文中搜索的关键字或短语。 - sources (string,可选):一个逗号分隔的标识符字符串,用于您想要标题的新闻来源或博客。 - category (枚举:“商业”、“娱乐”、“一般”、“健康”、“科学”、“体育”、“技术”,可选):你想成为头条新闻的类别。可能的选择:商业、娱乐、综合、健康、科学、体育、技术。 - language (字符串,可选):您要获取标题的语言的2个字母的ISO 639-1代码。可能的选项:ar、de、en、es、fr、he、it、nl、no、pt、ru、sv、ud、zh。默认值:返回所有语言。 - country (字符串,可选):您要获取头条新闻的国家的2个字母的ISO 3166-1国家代码。可能的选项:ae、ar、at、au、be、bg、br、ca、ch、cn、co、cu、cz、de、eg、fr、gb、gr、hk、hu、id、ie、il、in、it、jp、kr、lt、lv、ma、mx、my、ng、nl、no、nz、ph、pl、pt、ro、rs、ru、sa、se、sg、si、sk、th、tr、tw、ua、us、ve、za。默认值:返回所有国家。 - pageSize (整数,可选,默认100):每页(请求)返回的结果数。默认值为20,最大值为100。 - page (整数,可选,默认值1):如果找到的总结果大于pageSize,则使用此选项浏览结果。
- 输出:
- 包含以下内容的对象 status, totalResults,以及一系列 articles 包括来源、作者、标题、描述、URL、图像URL、发布日期和内容等详细信息。
错误处理
服务器尝试根据新闻API响应提供有意义的错误消息。如果API调用失败,该工具将抛出一个错误,其中包含有关失败的详细信息,包括News API错误消息和代码(如果可用)。
延伸
要添加更多新闻API端点作为工具,请在中创建新的TypeScript文件 src/tools/,使用Zod定义其输入模式,实现处理程序函数以调用News API SDK,并导出工具定义。然后,在中导入并注册新工具 src/tools/index.ts.

