MCP NewsAPI.ai服务器
一个生产就绪的模型上下文协议(MCP)服务器,它公开 NewsAPI.ai/事件注册表 作为搜索新闻文章、事件和执行文本分析的工具。
API基地: https://eventregistry.org/api/v1/
特性
- 文章检索:通过按日期、语言、来源、情感等进行筛选来搜索新闻文章
- 事件搜索:使用类别、位置和日期过滤搜索新闻事件
- 概念建议:获取用于搜索的概念URI
- 文本分析:情感分析、分类、注释和相似性计算
- 坚韧的:针对速率限制(429)和服务器错误(5xx)的指数退避和抖动自动重试
- 类型安全:带Zod验证的完整TypeScript实现
- 标准化响应:所有搜索端点的分页格式一致
需求
- Node.js 18或更高版本
- NewsAPI.ai API密钥(在这里买一个)
设置
- 克隆或下载此存储库
- 安装依赖项:
npm install- 配置API密钥:
cp .env.example .env编辑 .env 并添加您的NewsAPI.ai API密钥:
NEWSAPI_AI_KEY=your_api_key_here用法
发展模式
在热重载的开发模式下运行服务器:
npm run dev生产模式
构建并运行服务器:
npm run build
npm startMCP配置
将此服务器添加到您的MCP客户端配置中(例如,Claude Desktop):
{
"mcpServers": {
"newsapi": {
"command": "node",
"args": ["/path/to/mcp-newsapi-ai/dist/index.js"],
"env": {
"NEWSAPI_AI_KEY": "your_api_key_here"
}
}
}
}对于开发,您可以使用 tsx 直接:
{
"mcpServers": {
"newsapi": {
"command": "npx",
"args": ["-y", "tsx", "/path/to/mcp-newsapi-ai/src/index.ts"],
"env": {
"NEWSAPI_AI_KEY": "your_api_key_here"
}
}
}
}可用工具
新闻搜索文章
搜索具有丰富过滤选项的新闻文章。
示例:
{
"query": "artificial intelligence",
"lang": "eng",
"from": "2024-01-01",
"to": "2024-12-31",
"sortBy": "date",
"page": 1,
"pageSize": 10
}参数:
query(必填):搜索关键字lang:语言代码(例如eng、spa、fra)from:开始日期(YYYY-MM-DD)to:结束日期(YYYY-MM-DD)sourceUri:源URI数组conceptUri:概念URI数组category:类别URI数组sentimentMin:最低情绪(-1比1)sentimentMax:最大情绪(-1比1)sortBy:排序顺序(日期、相对时间、来源重要性)page:页码(默认值:1)pageSize:每页结果数(1-100,默认值:50)
响应:
{
"page": 1,
"pageSize": 10,
"total": 1234,
"results": [...]
}新闻搜索事件
搜索新闻事件。
示例:
{
"query": "climate summit",
"lang": "eng",
"page": 1,
"pageSize": 20
}参数:
query:搜索关键字(可选)lang:语言代码from:开始日期(YYYY-MM-DD)to:结束日期(YYYY-MM-DD)conceptUri:概念URI数组category:类别URI数组page:页码(默认值:1)pageSize:每页结果数(1-100,默认值:50)
news.suggest_概念
根据文本前缀获取概念建议。
示例:
{
"text": "climate",
"limit": 10
}参数:
text(必填):要搜索的文本前缀limit:最大建议值(1-20,默认值:10)
news.text.sention
分析文本的情感。
示例:
{
"text": "This is a great day!"
}响应:返回介于-1(负)和1(正)之间的情绪得分。
news.text分类
使用分类法对文本进行分类。
示例:
{
"text": "Apple announces new iPhone with advanced AI features",
"taxonomy": "dmoz"
}参数:
text(必填):要分类的文本taxonomy:要使用的分类(dmoz或iptc,默认值:dmoz)
news.text.annotate
用语义概念注释文本。
示例:
{
"text": "Elon Musk's SpaceX launches new satellite"
}响应:返回检测到的具有URI的实体和概念。
news.text.相似性
计算两个文本之间的语义相似度。
示例:
{
"text1": "AI is transforming the world",
"text2": "Artificial intelligence changes everything"
}响应:返回介于0和1之间的相似性得分。
错误处理
服务器提供结构化错误响应:
{
"error": "NewsApiError",
"status": 429,
"message": "API request failed with status 429: Rate limit exceeded"
}常见错误:
- 缺少API密钥:请检查
.env文件 - 429(速率限制):服务器将自动重试并回退
- 5xx(服务器错误):服务器将自动重试最多3次
- 验证错误:根据架构检查输入参数
费率限制和成本
NewsAPI.ai有不同的定价级别和不同的费率限制。请在以下网址查看您的计划限额 newsapi.ai/pricing.
服务器自动处理具有指数退避和抖动的速率限制,对429和5xx错误最多重试3次。
故障排除
服务器无法启动
错误: NEWSAPI_AI_KEY environment variable is not set
解决方案:确保您已创建 .env 文件,或者在运行服务器时设置环境变量。
验证错误
错误: page=0 或其他无效参数
解决方案:检查工具说明中的参数约束。例如, page 必须大于等于1, pageSize 必须介于1到100之间。
429速率限制错误
服务器会自动以指数回退方式重试。如果重试后继续看到429个错误:
- 检查您的API计划限制
- 减少请求的频率
- 考虑升级您的NewsAPI.ai计划
网络或超时错误
服务器最多重试3次网络错误。如果问题仍然存在:
- 检查您的互联网连接
- 验证NewsAPI.ai服务状态
- 检查防火墙或代理问题
发展
项目结构
mcp-newsapi-ai/
├── src/
│ ├── index.ts # MCP server implementation
│ ├── client.ts # HTTP client with retry logic
│ ├── schema.ts # Zod validation schemas
│ ├── util.ts # Utility functions
│ └── tools/
│ ├── articles.ts # Article search
│ ├── events.ts # Event search
│ ├── concepts.ts # Concept suggestions
│ └── text.ts # Text analytics
├── package.json
├── tsconfig.json
└── README.md测试
要手动测试服务器,请执行以下操作:
- 启动服务器:
npm run dev - 服务器通过stdio(标准输入/输出)进行通信
- 使用像Claude Desktop这样的MCP客户端与工具进行交互
安全
- API键仅从环境变量中读取
- 控制台上没有记录或打印任何机密
- 不记录个人身份信息(PII)
许可证
麻省理工学院
