新闻API服务

一个基于MCP协议的新闻API服务器,提供搜索和获取新闻文章的功能。

  • by matteoantoci
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 matteoantoci/mcp-newsapi

使用说明

MCP新闻API服务器

模型上下文协议(MCP)服务器,用于公开来自新闻API的端点(https://newsapi.org)搜索和检索新闻文章。该服务器允许通过MCP协议对新闻数据进行编程访问。

先决条件

  • Node.js(建议使用v18或更高版本)
  • npm(附带Node.js)
  • 新闻API密钥(从https://newsapi.org)
  • (可选)MCP兼容客户端或运行器(例如,VSCode扩展、CLI)

设置

  1. 克隆存储库或确保您位于项目目录中。

  2. 安装依赖项:

    npm install
    
  3. 构建服务器:

    npm run build
    

    这将创建一个 build 包含已编译JavaScript代码的目录。

  4. 设置您的新闻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.