新闻搜索与聚合服务

一个集成GNews API的MCP服务器,提供新闻文章搜索、头条新闻获取和电子邮件草稿生成功能。

  • by Adi-11
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Adi-11/news-mcp

使用说明

GNews MCP服务器

一个模型上下文协议(MCP)服务器,它集成了 GNews API 用于搜索和检索新闻文章。

特性

  • 搜索:使用支持以下内容的关键字搜索新闻文章:

    • 逻辑运算符(AND、OR、NOT)
    • 带引号的短语搜索
    • 多种语言和国家
    • 日期范围过滤
    • 按相关性或发布日期排序
    • 分页
  • get_top_headlines:按类别获取热门新闻文章,支持:

    • 9个新闻类别(一般、商业、科技、体育等)
    • 多种语言和国家
    • 可选关键字过滤
    • 日期范围过滤
    • 分页

安装

先决条件

  • Python 3.10或更高版本
  • 紫外线 (推荐)或pip
  • A免费 GNews API密钥 (免费获得一个https://gnews.io)

设置

  1. 克隆或导航到项目目录:
cd gnews-mcp
  1. 安装依赖项:
uv install

或者使用pip:

pip install -e .

配置

获取API密钥

  1. 访问 gnews.io
  2. 注册一个免费帐户
  3. 从仪表板复制API密钥

设置API密钥

将GNews API密钥设置为环境变量:

# Linux/macOS
export GNEWS_API_KEY='your-api-key-here'

# Windows (PowerShell)
$env:GNEWS_API_KEY='your-api-key-here'

# Or create a .env file and load it
echo "GNEWS_API_KEY=your-api-key-here" > .env

运行服务器

直接执行

# With API key set in environment
GNEWS_API_KEY='your-api-key' uv run main.py

MCP Inspector开发模式

使用MCP检查器测试和调试服务器:

# Terminal 1: Start the server
GNEWS_API_KEY='your-api-key' uv run mcp dev main.py

# Terminal 2: In another terminal, start the inspector
npx -y @modelcontextprotocol/inspector

# Open http://localhost:5000 in your browser

在Claude桌面中安装

uv run mcp install main.py --name "GNews"

然后在Claude Desktop配置文件中进行配置:

macOS/Linux: ~/.config/claude/claude_desktop_config.json

{
  "mcpServers": {
    "gnews": {
      "command": "uv",
      "args": ["--directory", "/path/to/gnews-mcp", "run", "main.py"],
      "env": {
        "GNEWS_API_KEY": "your-api-key-here"
      }
    }
  }
}

视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "gnews": {
      "command": "uv",
      "args": ["--directory", "C:\\path\\to\\gnews-mcp", "run", "main.py"],
      "env": {
        "GNEWS_API_KEY": "your-api-key-here"
      }
    }
  }
}

工具参考

搜索

使用关键字搜索新闻文章。

参数:

  • q (必填):搜索关键字
    • 支持逻辑运算符: AND, OR, NOT
    • 支持短语搜索: "exact phrase"
    • 示例: "Apple iPhone", Apple OR Microsoft, Tesla AND NOT Model S
  • lang (可选):语言代码(默认值: en)
    • 示例: en, fr, de, es, ja等等。
  • country (可选):国家代码
    • 示例: us, gb, fr, de, jp等等。
  • max_articles (可选):结果数量(1-100,默认值:10)
  • page (可选):分页页码(默认值:1)
  • sort_by (可选):排序顺序(默认: publishedAt)
    • 选项: publishedAt, relevance
  • from_date (可选):从日期过滤(ISO 8601格式)
    • 例子: 2025-02-01T00:00:00Z
  • to_date (可选):过滤到日期(ISO 8601格式)

例子:

Search for "Apple iPhone 16" in English, sorted by relevance, maximum 5 articles

get_top_headlines

按类别获取热门新闻文章。

参数:

  • category (可选):新闻类别(默认: general)
    • 选项: general, world, nation, business, technology, entertainment, sports, science, health
  • lang (可选):语言代码(默认值: en)
  • country (可选):国家代码
  • max_articles (可选):结果数量(1-100,默认值:10)
  • page (可选):分页页码(默认值:1)
  • query (可选):附加关键字过滤器
  • from_date (可选):从日期过滤(ISO 8601格式)
  • to_date (可选):过滤到日期(ISO 8601格式)

例子:

Get top 10 technology headlines in the US

电子邮件服务器

添加了一个额外的MCP服务器,可以根据以下内容起草虚拟电子邮件 GNews工具返回的新闻数据。确实如此 不 发送任何真实的电子邮件;它 只返回一个描述草稿消息的JSON结构。这个工具是 打算在之后被拴住 search 或 get_top_headlines 当从a使用时 MCP客户或检查员。

工具: draft_email

参数:

  • news (必填):GNews工具生成的搜索结果对象。它 应该遵循同样的原则 SearchResult 使用的架构 search/get_top_headlines.
  • to (可选):收件人电子邮件地址(默认为 user@example.com).
  • cc (可选):CC地址列表。
  • bcc (可选):BCC地址列表。

退货:

带有字段的JSON对象 to, subject, body, cc,以及 bcc 概述a 简单的草稿信息。

例子:

# first call the news server
result = await gnews.search(q="Python 4 release", max_articles=5)
# then draft an email from the returned articles
email = await email_server.draft_email(news=result, to="team@example.com")
print(email)

查询示例

搜索示例

  1. 查找有关AI突破的文章:

    search(q="artificial intelligence breakthrough", lang="en", max_articles=10)
    
  2. 搜索特斯拉新闻,不包括Model S:

    search(q="Tesla AND NOT Model S", lang="en", max_articles=15)
    
  3. 查找特定日期范围内的新闻:

    search(
      q="climate change",
      lang="en",
      country="us",
      from_date="2025-01-01T00:00:00Z",
      to_date="2025-02-21T23:59:59Z",
      max_articles=20
    )
    
  4. 在新闻标题中搜索精确短语:

    search(q='"renewable energy"', lang="en", max_articles=10)
    

头条新闻示例

  1. 获取美国热门科技新闻:

    get_top_headlines(category="technology", country="us", lang="en", max_articles=10)
    
  2. 获取多种语言的健康新闻:

    get_top_headlines(category="health", lang="fr", country="fr", max_articles=5)
    
  3. 使用可选过滤功能获取商业头条:

    get_top_headlines(
      category="business",
      country="gb",
      lang="en",
      query="fintech",
      max_articles=15
    )
    

响应格式

这两个工具都返回结构化响应:

{
  "totalArticles": 42,  # Total articles found matching criteria
  "articles": [
    {
      "title": "Article Title",
      "description": "Article summary...",
      "url": "https://example.com/article",
      "image": "https://example.com/image.jpg",
      "source": "Source Name",
      "publishedAt": "2025-02-20T10:30:00Z"
    },
    ...
  ]
}

支持的语言

阿拉伯语、孟加拉语、中文、荷兰语、英语、法语、德语、希腊语、希伯来语、印地语、印度尼西亚语、意大利语、日语、马拉雅拉姆语、马拉地语、挪威语、葡萄牙语、旁遮普语、罗马尼亚语、俄语、西班牙语、瑞典语、泰米尔语、泰卢固语、土耳其语、乌克兰语等。

支持的国家

阿根廷、澳大利亚、奥地利、孟加拉国、巴西、加拿大、中国、法国、德国、印度、日本、墨西哥、荷兰、俄罗斯、西班牙、英国、美国等等。

看 GNews文档 查看完整列表。

API限值

  • 免费文章:受订阅限制
  • 每次请求的最大结果:100篇文章
  • 最多分页:1000篇文章(10页,共100页)
  • 费率限制:取决于订阅级别

故障排除

API密钥错误

  • 确保 GNEWS_API_KEY 环境变量设置正确
  • 获取免费钥匙https://gnews.io

速率限制错误

  • 您已超过免费等级限制
  • 升级您的计划https://gnews.io/pricing

没有结果

  • 尝试使用更简单的搜索关键字
  • 检查您的语言和国家代码
  • 验证日期范围参数是否正确

超时问题

  • 尽量少写文章(max_articles=5)
  • 检查您的互联网连接
  • API可能暂时不可用

发展

项目结构

gnews-mcp/
├── main.py              # Main MCP server implementation
├── pyproject.toml       # Project dependencies and metadata
└── README.md           # This file

测试

直接使用MCP检查器的测试工具:

GNEWS_API_KEY='your-key' uv run mcp dev main.py

贡献

请随时使用其他功能扩展此服务器:

  • 结果缓存
  • 更高级的过滤
  • 与其他新闻API集成
  • 自定义类别定义

许可证

麻省理工学院

资源