News Aggregator API

News Aggregator API

A modular, scalable news aggregation backend that provides a unified interface to TheNewsAPI for retrieving current and historical news articles with advanced filtering capabilities, designed specifically for consumption by AI agents.

Category
Visit Server

README

News Aggregator API (MCP Server)

A modular, scalable news aggregation backend built with MCP server conventions and TypeScript. This API provides a unified interface to TheNewsAPI for retrieving current and historical news articles with advanced filtering capabilities. Designed specifically for consumption by AI agents, this API prioritizes structured data and consistent patterns.

Features

  • Unified API: Consistent interface for accessing news data
  • TypeScript: Fully typed for reliable development
  • MCP Architecture: Scalable, modular design with separation of concerns
  • Multiple Endpoints: Access various types of news content
  • Environment Variables: Secure configuration management
  • Error Handling: Consistent error formats with appropriate status codes
  • Filtering: Support for various filtering parameters
  • Caching: Intelligent caching system with management endpoints
  • Interactive Documentation: Swagger-based API documentation
  • AI-Friendly Responses: Structured data optimized for machine consumption

Endpoints

News Endpoints

Endpoint Description Example
/api/news/top Get top news headlines /api/news/top?categories=business
/api/news/all Get all news with advanced search /api/news/all?search=technology
/api/news/similar/:uuid Get similar articles to a specific one /api/news/similar/cc11e3ab-ced0-4a42-9146-e426505e2e67
/api/news/uuid/:uuid Get a specific article by UUID /api/news/uuid/cc11e3ab-ced0-4a42-9146-e426505e2e67
/api/news/sources Get available news sources /api/news/sources?language=en

Cache Management Endpoints

Endpoint Description Example
/api/cache/stats Get cache statistics /api/cache/stats
/api/cache/clear Clear all cache DELETE /api/cache/clear
/api/cache/clear/:type Clear cache by type DELETE /api/cache/clear/top

Utility Endpoints

Endpoint Description
/health Health check endpoint
/docs Interactive API documentation
/docs.json OpenAPI specification
/examples Usage examples

Testing

This project implements a comprehensive testing strategy with multiple layers of tests to ensure reliability and correctness.

Test Types

  1. Unit Tests

    • Isolated tests for individual components
    • Mocked dependencies for true unit isolation
    • Focused on business logic validation
  2. Controller Tests

    • Verify controller behavior with mocked services
    • Test proper request handling and response formatting
    • Confirm error handling patterns are consistent
  3. Integration Tests

    • Test the complete request-response cycle
    • Verify API endpoints with supertest
    • Mock external API calls for reliability

Testing Best Practices

This project follows these testing best practices:

  • Isolation - Tests don't depend on each other or external services
  • Repeatable - Tests produce the same results on any environment
  • Fast - Mocking external dependencies keeps tests efficient
  • Comprehensive - Core functionality has high test coverage
  • Maintainable - Tests follow consistent patterns and structure

Running Tests

# Run all tests
npm test

# Run tests with coverage
npm run test:coverage

# Run a specific test file
npx jest path/to/test.ts

Installation

# Clone the repository
git clone <repository-url>

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env
# Edit .env file with your own API key and database URL

# Generate Prisma client
npx prisma generate

# Build the project
npm run build

# Start the server
npm start

Configuration

Create a .env file with the following variables:

# News Aggregator API Environment Variables

# API Configuration
NEWS_API_TOKEN=your_api_token_here

# Server Configuration
PORT=3000
NODE_ENV=development

# Database Configuration
DATABASE_URL="file:./dev.db"

Database Configuration

The application uses Prisma ORM with SQLite by default. The DATABASE_URL environment variable should point to your database file. For production, you can configure it to use PostgreSQL or MySQL.

Development

# Run in development mode with hot reload
npm run dev

# Run linting
npm run lint

# Run tests
npm test

Testing Infrastructure

The project includes a comprehensive test suite built with Jest and Supertest, covering API endpoints, database integration, and server connectivity checks.

Running Tests

# Run all tests
npm test

# Run only API endpoint tests
npm run test:api

# Run only database integration tests
npm run test:db

# Run tests with coverage report
npm run test:coverage

# Run tests in watch mode (for development)
npm run test:watch

# Check server connectivity
npm run check-server

Test Structure

  • API Endpoint Tests: Located in src/__tests__/api/, these tests verify that all API endpoints return the expected responses, handle errors correctly, and apply appropriate filtering.

  • Database Integration Tests: Located in src/__tests__/database.test.ts, these tests verify database connectivity, query execution, and transaction support.

  • Server Connectivity Script: Located in scripts/check-server.ts, this script tests connectivity to a running server instance, verifying that critical endpoints are functioning correctly.

Test Environment

Tests use a separate environment configuration specified by setting NODE_ENV=test. This ensures tests don't interfere with development or production environments. The setup includes:

  • Automatic database connection setup and teardown
  • Cache clearing between tests to ensure isolation
  • Server startup and shutdown for endpoint testing

Future Enhancements Todo List

Priority 1: Foundation Improvements

  • [x] Caching System

    • Implement in-memory caching
    • Cache frequently accessed data like top news and sources
    • Add cache invalidation strategies
    • Configure TTL (Time-To-Live) for different content types
    • Add cache management endpoints
  • [x] Data Persistence Layer

    • Add database integration (SQLite with Prisma)
    • Create schema for storing enhanced article metadata
    • Implement repository pattern for data access
    • Add migration system for schema changes
  • [x] API Documentation

    • Generate OpenAPI/Swagger specification
    • Add interactive API documentation
    • Create usage examples for each endpoint

API Documentation

The API now includes comprehensive documentation using OpenAPI/Swagger:

  • Interactive API Documentation: Available at /docs when the server is running
  • OpenAPI Specification: JSON format available at /docs.json
  • Usage Examples: Available at /examples with code samples in multiple languages

How to Access the Documentation

  1. Start the server with npm run dev or npm start
  2. Open your browser to http://localhost:3000/docs for the interactive Swagger UI
  3. Browse through the available endpoints, request parameters, and response formats
  4. Reference implementation examples at http://localhost:3000/examples

API Documentation Features

  • Complete endpoint descriptions with parameters and response types
  • Interactive "Try it out" capability to test endpoints directly
  • Request/response schema definitions
  • Code snippets for API consumption
  • Examples of integrating with the MCP server architecture

Priority 2: Security & Performance

  • [ ] Authentication & User Management

    • Implement JWT-based authentication
    • Create user registration and login endpoints
    • Add role-based access control
    • Implement secure password handling
  • [ ] Rate Limiting

    • Add request throttling middleware
    • Implement tiered access levels
    • Create fair usage policies
    • Add rate limit headers in responses
  • [ ] Monitoring & Analytics

    • Set up request logging and monitoring
    • Add performance metrics collection
    • Create usage dashboards
    • Implement error tracking and alerting

Priority 3: Enhanced Functionality

  • [ ] Content Processing

    • Add text summarization capabilities
    • Implement entity extraction
    • Add sentiment analysis
    • Create topic categorization beyond source categories
    • Implement duplicate detection and grouping
  • [ ] Personalization

    • Add user preference tracking
    • Create personalized endpoints based on reading history
    • Implement topic following functionality
    • Add recommendation engine
  • [ ] Webhooks & Real-time Updates

    • Implement webhook registration
    • Create event-based notification system
    • Add SSE (Server-Sent Events) for real-time updates
    • Implement topic subscription functionality

Contributing

Contributions to the News Aggregator API project are welcome! This project is designed to be a friendly, well-documented codebase for those interested in MCP server architecture, especially with AI consumption in mind.

How to Contribute

  1. Fork the repository
  2. Create a new feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests to ensure everything works (npm test)
  5. Commit your changes (git commit -m 'Add some amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

Code Style

Please follow the existing code style and patterns in the project. This project uses ESLint for code quality and formatting.

Security Considerations

When contributing, please ensure:

  • No API keys or credentials are hardcoded
  • Environment variables are used for configuration
  • No sensitive data is logged
  • Input validation is properly implemented

Testing

All new features should include appropriate tests. Please follow the existing testing patterns in the project.

  • [ ] Search History & Bookmarks
    • Add saved searches functionality
    • Implement article bookmarking
    • Create reading history tracking
    • Add user collections feature

Contributing

  1. Fork the repository
  2. Create your feature branch: git checkout -b feature/my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin feature/my-new-feature
  5. Submit a pull request

License

ISC

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured